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也是可以的

这个的钱两个方法引用的

https://www.cnblogs.com/ttjm/p/13065240.html

最后修改:2021 年 03 月 24 日 06 : 53 PM
如果觉得我的文章对你有用,请随意赞赏