以下の例だと#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
参考: