gpt4 book ai didi

javascript - 当数组中的所有项目都已处理完毕后调用done()

转载 作者:行者123 更新时间:2023-12-01 03:37:56 24 4
gpt4 key购买 nike

示例:JSFiddle

[1,'a',2,'b'].forEach(function(item, i){
if (typeof item === 'number') {
setTimeout(function(){
console.log(item * 2);
},1000)
} else if (typeof item === 'string') {
console.log(item);
}
})
done();

function done(){
console.log('done');
}

此代码返回:

a
b
done
2
4

如何更改代码,以便仅当数组中的所有项目都已处理完毕时才调用 done() ?即:

a
b
2
4
done

最佳答案

使用Promise
将每个流程包装在 Promise 中,当流程完成时该 Promise 会得到解决。
然后将所有 Promise 包装在 Promise.all 中,这会创建一个新的 Promise,一旦所有包装的 Promise 都已解析,该 Promise 就会解析。
然后调用 done 函数。

var processes = [1,'a',2,'b'].map(function(item){
if (typeof item === 'number') {
return new Promise(function(resolve) {
setTimeout(function(){
console.log(item * 2);
resolve();
},1000);
});
} else if (typeof item === 'string') {
console.log(item);
return Promise.resolve(); // A Promise that resolves immediately
}
});
Promise.all(processes).then(done);

JSFiddle with your code modified as above

关于javascript - 当数组中的所有项目都已处理完毕后调用done(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44114247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com