以下の例だと#1,#2の両方が呼ばれる。
var firstDeferred = $.Deferred(), secondDeferred = $.Deferred();
firstDeferred.promise()
.fail(function (error) {
// #1
})
.then(function () {
return secondDeferred.promise();
})
.fail(function (error) {
// #2
});
firstDeferred.reject('first deferred object');
途中でrejectが伝わるのを防ぎたい場合はthenに関数を渡す。then( doneFilter , failFilter )となっているので、第二引数に関数を渡すとそこまででfailの実行は止まる。
var firstDeferred = $.Deferred(),
secondDeferred = $.Deferred();
firstDeferred.promise()
.fail(function (error) {
console.log(error);
})
.then(null, function () { // Notice the null
return secondDeferred.promise();
})
.fail(function (error) {
console.log(error);
});
firstDeferred.reject('first deferred object');
secondDeferred.reject('second deferred object');
↑を実行すると↓のログが出る。
first deferred object second deferred object
参考: