我认为您可以使用管道将回调函数作为数组传递。这是一个例子。
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 更改为拒绝。
var checkA = function() {
console.log('checkA');
return a.reject();
};
输出将是
"checkA"
"checkAll fail"
它不会去 checkB 和 checkC 因为 checkA 被拒绝。这样您就可以使用数组调用该函数
funList = [checkA, checkB, checkC];
for(var i=0; i<funList.length; i++){
checkAll = checkAll.pipe(funList[i]);
}
笔记。您必须确保回调始终返回 Deferred 对象。