2016-07-08 17 views
6

Şu anda Angular 2 içinde kullanılmak üzere kendi Promising'i uygulamaya çalışıyorum. Söz veriyorum reject Eğer bir Error: Uncaught (in promise): nope(…) alacağım, ama sadece reddedilecek ilk Promise .Unhandled Promise reddini Angular 2'de reddederken

Angular 2.0.0-rc.4, ancak diğer davranışlarda bunu fark ettim. Sorum şu ki, bu Promises anlayışımdaki bir hata mı, yoksa Açısal projeye bildirilmesi gereken bir hata mı?

örnek kod:

import {Component} from '@angular/core'; 
import {bootstrap} from '@angular/platform-browser-dynamic' 
@Component({ 
    template: "TestComponent" 
}) 
class TestComponent { 
} 
bootstrap(TestComponent, []); 

let p = new Promise((resolve, reject) => { 
    console.log("create promise"); 
    reject("nope"); 
}); 
console.log("setting up"); 
p.then(r => console.log("then: " + r)); 
p.catch(e => console.log("reject: " + e)); 
console.log("setup done"); 

Konsolu (Google Chrome 51.0.2704.106, Linux 64 bit):

create promise 
setting up 
setup done 
reject: nope 
Angular 2 is running in the development mode. Call enableProdMode() to enable the production mode. 
Unhandled Promise rejection: nope ; Zone: <root> ; Task: Promise.then ; Value: nope 
Error: Uncaught (in promise): nope(…) 
+1

es6 sözünü mü kullanıyorsunuz ya da kendi uygulamanız var mı? – Kliment

+0

Uygulama, söyleyebildiğim kadarıyla, "zone.js" öğesinden "ZoneAwarePromise". Bu yüzden Angular'ın alakalı olduğunu düşünüyorum. –

+0

Başlık bir şekilde yanıltıcıdır. 'Angular 2'de kendi sözünü uygulamak' açık bir şekilde, sözümüzü sözün vaat ettiğine işaret ediyor. – estus

cevap

9

O

olmalıdır
p 
.then(r => console.log("then: " + r)) 
.catch(e => console.log("reject: " + e)); 

p.then(...) tek başına işlenmemiş zincir oluşturur, bu Zone.js. Bluebird'in “işlenmemiş reddetmeleri” ile ilgilenirseniz, kuralları zaten biliyor olabilirsiniz.

+0

Teşekkürler, ben sadece neden çözüm hakkında düşündüğüm zaman beynimde "tık" yaptığında buldum Thierry Templier çalıştı. –

3

Aşağıdaki olabilir:

let p = new Promise((resolve, reject) => { 
    console.log("create promise"); 
    reject("nope"); 
}); 
console.log("setting up"); 
p.then(r => console.log("then: " + r), // <----- 
    e => console.log("reject: " + e)); 
+1

Aslında, bu işler, teşekkürler, bunu hiç düşünmedim. Ama neden '.catch' geri aramayı kullanmak yanlış? –

+1

Çünkü "catch" bir vaat işleyicisi (ya da yakalama) ve onlar zincirleme durmuyor ... –