2015-12-05 15 views
9

catchthen(_,onRejected)の違いはES6 Promiseですか?私はちょうどonRejectedが内部Promiseの拒否状態を処理しないことを知っています。onprojected vs catch in promise

Promise.resolve().then(() => { 
    return new Promise((resolve,reject) => { 
     throw new Error('Error occurs'); 
    }); 
},er => console.log(er)); //Chrome throws `Uncaught (in promise)` 

Promise.resolve().then(() => { 
    return new Promise((resolve,reject) => { 
     throw new Error('Error occurs'); 
    }); 
}).catch(er => console.log(er)); //Error occurs 

答えて

8

コードのあなたの最初の部分のエラーハンドラは、エラーがあなたの質問

.catch(onRejected); 

同じであるためのよう


を投げているのと同じ.thenであるので、文句を言わないエラーをキャッチ〜

.then(null, onRejected); 

ない

.then(_, onRejected); 

はどうなるのか確認してくださいは、私が最初の例では

+1

OPは変数名として '_'を使用していませんでしたが、彼は2番目のパラメータについてのみ尋ねていたことを示していました。 – hippietrail

0

を推測しているもの_に依存して、あなたのonRejectedPromise.resolve()に適用されます。 then(onResolved, onRejected)では、2つの関数のうち1つだけが呼び出され、両方は呼び出されません。 Promise.reject('something').then()で試してみると、の何かがコンソールに表示されます。 catch()は、返されている約束事に適用されるため、エラーは予期したとおりに捕捉されます。