array.foreach中使用同步问题
今天在写课设的时候遇到了一个在foreach中使用await的问题。
首先我一开始获取的是id列表,然后我想通过foreach的方式轮流用id查询到物品信息,为了保证我能读取到信息并赋值,我第一时间想到的是await的方式,让他堵塞直到完成。
尝试了下在 forEach函数中调用 await Promise() 方法,模仿异步请求方法如下:
var a = [1,2,3];
a.forEach(item=>{
setTimeout(()=>{
console.log(‘111’);
},2000)
})
console.log(‘2222’);
结果:
发现并没有按照我所想的每隔2秒输出111,输出3次以后,再是222
经过查阅资料后发现,实际forEach本身是异步的,内部也是异步的
两种方法
方法一
复制代码
var arry = […];
Promise.all(arry.map(function(elem){
return new Promise(function(resolve, reject){
...
resolve(result);
})
})).then(function(data){
//在这就可以等所有的返回结果可以得到
})
复制代码
方法二
复制代码
var arry = […];
var counter = 0;
arry.forEach(function(elem){
//异步回调中
counter++;
if(counter === arr.length){
//在这执行所有执行的完后的
}
})
其实用for循环加上await也是可以的
这个的钱两个方法引用的
评论区