正如标题所暗示的那样。我该怎么做呢?
我希望在forEach循环遍历每个元素并完成一些异步处理之后调用whenAllDone()
。
[1, 2, 3].forEach(
function(item, index, array, done) {
asyncFunction(item, function itemDone() {
console.log(item + " done");
done();
});
}, function allDone() {
console.log("All done");
whenAllDone();
}
);
有可能让它像这样工作吗?当forEach的第二个参数是一个回调函数时,它会在所有迭代中运行吗?
预期输出:
3 done
1 done
2 done
All done!
发布于 2014-06-03 18:47:11
如果你遇到异步函数,并且你想确保在执行代码之前它完成了它的任务,我们总是可以使用回调功能。
例如:
var ctr = 0;
posts.forEach(function(element, index, array){
asynchronous(function(data){
ctr++;
if (ctr === array.length) {
functionAfterForEach();
}
})
});
注意:functionAfterForEach
是在foreach任务完成后执行的函数。asynchronous
是在foreach内部执行的异步函数。
发布于 2015-11-12 22:31:14
我希望这能解决你的问题,当我需要执行带有异步任务的forEach时,我通常会用到它。
foo = [a,b,c,d];
waiting = foo.length;
foo.forEach(function(entry){
doAsynchronousFunction(entry,finish) //call finish after each entry
}
function finish(){
waiting--;
if (waiting==0) {
//do your Job intended to be done after forEach is completed
}
}
使用
function doAsynchronousFunction(entry,callback){
//asynchronousjob with entry
callback();
}
发布于 2018-08-15 18:29:32
在ES2018中,你可以使用异步迭代器:
const asyncFunction = a => fetch(a);
const itemDone = a => console.log(a);
async function example() {
const arrayOfFetchPromises = [1, 2, 3].map(asyncFunction);
for await (const item of arrayOfFetchPromises) {
itemDone(item);
}
console.log('All done');
}
https://stackoverflow.com/questions/18983138
复制相似问题