2016-07-08 18 views
6

私は現在、Angular 2内で使用するPromiseを実装しようとしています。rejectという約束があれば、私はError: Uncaught (in promise): nope(…)を取得しますが、 。PromiseをAngular 2で拒否した場合の未解決のPromise拒否

これはAngular 2.0.0-rc.4ですが、私はこれを他の動作に気付きました。私の質問は、これが私の約束を理解する上で間違っているのか、これはAngularプロジェクトに報告すべきバグですか?

サンプルコード:

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"); 

コンソール(Google Chromeの51.0.2704.106、Linuxの64ビット):

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約束を使用していますか、または独自の実装がありますか? – Kliment

+0

私が知る限り、実装は 'zone.js'の' ZoneAwarePromise'です。それが私がAngularに関連していると思う理由です。 –

+0

タイトルは何とか誤解を招くことがあります。 'Angular 2で自らのPromiseを実装する'ことは明白に、自家製Promiseの実装があることを示唆しています。 – estus

答えて

9

それは

する必要があります
p 
.then(r => console.log("then: " + r)) 
.catch(e => console.log("reject: " + e)); 

p.then(...)は、未処理のチェーンを作成するだけで、これはZone.jsを邪魔します。ブルーバードの「未処理の拒否」を扱っている場合は、すでにルールを知っている可能性があります。

+0

なぜ私の頭脳で「クリック」したら解決したのですか? Thierry Templierが働いた。 –

3

あなたは、次のことができます:

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

実際には、これは動作します、ありがとう、私はそれについて考えたことはありません。しかし、なぜ '.catch'コールバックを使うのは間違っていますか? –

+1

「キャッチ」は約束のハンドラ(そしてキャッチ)であり、連鎖を止めないからです... –

関連する問題