检测所有异步调用何时完成然后触发另一个函数的最佳方法是什么?我有三个查询是由用户选择主题触发的。这些查询运行,然后将它们的返回值组合起来用于新函数。问题是我需要知道什么时候完成它们然后运行新函数。
function queryHandler1() {
// do something
return result1;
}
function queryHandler2() {
// do something
return result2;
}
function queryHandler3() {
// do something
return result3;
}
function alldone(result1, result2, result3) {
// do something
return result4;
}
我尝试过使用jquery.when(),但它只在第一次运行时,当用户选择一个新选项时,它不会触发alldone?
// global
var d1 = $.Deferred();
var d2 = $.Deferred();
var d3 = $.Deferred();
function queryHandler1() {
// do something
d1.resolve();
return result1;
}
function queryHandler2() {
// do something
d2.resolve();
return result2;
}
function queryHandler3() {
// do something
d3.resolve();
return result3;
}
function alldone(result1, result2, result3) {
// do something
return result4;
}
// the top level $.when
$.when(d1, d2, d3).done(function() {
alldone();
});
如何重置延迟或解决,以便再次触发所有完成?
感谢您的帮助!
答案 0 :(得分:1)
您可以使用Async library
对于您的情况,您可以使用async.parallel或async.series 取决于你想要同时或按顺序运行你的任务
中使用该库答案 1 :(得分:0)
我用我认为不太优雅的解决方案解决了这个问题,但它确实有效。
function queryHandler1() {
// do something
alldone();
}
function queryHandler2() {
// do something
alldone();
}
function queryHandler3() {
// do something
alldone();
}
var numCalls = 0;
function alldone() {
if (numCalls === 2) {
// do something
console.log("YES ALL DONE");
} else {
numCalls ++;
}
}
有任何改进吗?
由于