私のプロジェクトには、延期されたプロミスを返す複数の API を使用するワークフローが含まれています。jQuery 1.8を使用しています
.done()
との違いは、新しい約束.then()
を.then()
返すことだと理解しています。私の例では、最初の deferred が拒否された場合.fail()
、2 番目のハンドラーが新しい promise にチェーンされているため、最初のハンドラーのみが実行されると予想されます。実行時には、両方の失敗ハンドラが実行されます。
var firstDeferred = $.Deferred(), secondDeferred = $.Deferred();
firstDeferred.promise()
.fail(function (error) {
console.log(error);
})
.then(function () {
return secondDeferred.promise();
})
.fail(function (error) {
console.log(error);
});
firstDeferred.reject('first deferred object');
//secondDeferred.reject('second deferred object');
私の期待される結果:
> first deferred object
実結果:
> first deferred object
> first deferred object
両方の.fail()
ハンドラーが呼び出されるのはなぜですか? 特定の延期された promise が拒否された場合にのみハンドラーが呼び出されるようにワークフローを構築するにはどうすればよいですか?