パイプを使用して、コールバック関数を配列としてパイプできると思います。ここに例があります。
var a = $.Deferred();
var b = $.Deferred();
var c = $.Deferred();
var checkA = function() {
console.log('checkA');
return a.resolve();
};
var checkB = function() {
console.log('checkB');
return b.resolve();
};
var checkC = function() {
console.log('checkC');
return c.reject();
};
checkAll = $.Deferred().resolve().promise();
checkAll = checkAll.pipe(checkA);
checkAll = checkAll.pipe(checkB);
checkAll = checkAll.pipe(checkC);
checkAll.done(function() {
return console.log('checkAll done');
}).fail(function() {
return console.log('checkAll fail');
});
出力は次のようになります
"checkA"
"checkB"
"checkC"
"checkAll fail"
別の結果を見たい場合は、チェック機能で結果の「解決」を「拒否」に変更できます。例: checkA を reject に変更した場合。
var checkA = function() {
console.log('checkA');
return a.reject();
};
出力は次のようになります。
"checkA"
"checkAll fail"
checkA が拒否されるため、checkB と checkC には進みません。配列で関数を呼び出すことができるように
funList = [checkA, checkB, checkC];
for(var i=0; i<funList.length; i++){
checkAll = checkAll.pipe(funList[i]);
}
ノート。コールバックが常に Deferred オブジェクトを返すようにする必要があります。