我有一个在循环中多次调用异步函数的函数。
function myFunc() {
var things = [1, 2, 3, 4, 5];
$.each(things, asyncFunc);
alert('Things ' + things.join() + ' have all been processed.');
}
function asyncFunc(key, value) {
$.post('api.php', value: thing);
}
我只想在所有异步调用都完成后才继续。
我可以使
asyncFunc
返回一个延迟的对象,并在.resolve()
方法中调用$.post.done
,但是如何才能阻塞.each
循环并仅在asyncFunc
完成后才继续?仅当所有对
asyncFunc
的调用完成后,还有什么其他方式可以继续? 最佳答案
将回调传递到asyncFunc
在回调中,有一个基于things.length
的计数器
计算回调已被调用的次数
如果计数器指示还有其他操作,请结束回调
如果计数器指示这是最后一次,则继续调用
例如打回来
var count = things.length,
callback = function () {
if (0<--count) return;
// do stuff
};
关于javascript - 如何知道异步函数何时完成,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18314526/