最初の約束が失敗する約束チェーンがありますが、それでも2番目の約束は正常に実行されていますが、期待どおりに失敗するはずです...
私がしたことは簡単でした:
dummyPromise().then(success, error).then(success, error);
したがって、最初のエラーが実行された場合、後続のエラーを実行する必要がありますが、得られるものは次のとおりです。
1. error
2. success
どうしてこんなことに??
最初の約束が失敗する約束チェーンがありますが、それでも2番目の約束は正常に実行されていますが、期待どおりに失敗するはずです...
私がしたことは簡単でした:
dummyPromise().then(success, error).then(success, error);
したがって、最初のエラーが実行された場合、後続のエラーを実行する必要がありますが、得られるものは次のとおりです。
1. error
2. success
どうしてこんなことに??
return $q.reject();
チェーン内の次の Promise も失敗するためには、Promiseから戻る必要があります。分岐したプランカーを参照してください: http://plnkr.co/edit/porOG8qVg2GkeddzVHu3?p=preview
理由は簡単です。エラー ハンドラーがエラーを修正するためのアクションを実行する可能性があります。したがって、デフォルトで次の promise が失敗することは合理的ではありません。ちなみに、成功$q.reject()
ハンドラーからでも、エラー状態を感知した場合は、チェーン内の次の promise が失敗するように返すことができます。
これが約束の仕組みです。error -function でエラーを処理します。特に指定がない場合は、解決された新しい promise が返されます。拒否したい場合は、$q.reject();
Have a look at the documentationを返して拒否する必要があります。の例が$q.reject();
それをよく説明しています。
promiseB = promiseA.then(function(result) {
// success: do something and resolve promiseB
// with the old or a new result
return result;
}, function(reason) {
// error: handle the error if possible and
// resolve promiseB with newPromiseOrValue,
// otherwise forward the rejection to promiseB
if (canHandle(reason)) {
// handle the error and recover
return newPromiseOrValue;
}
return $q.reject(reason);
});