forEach中如何使用await

                    skuList.forEach(async item => {
                        item.a = 1;
                        let res = await req.querySync(...);
                        item.sku = res.filter(item => item.del == 0);
                        item.b = 2;
                    })

这段代码中 querySync是一个promise

在这段代码下面马上打印skuList

a 每个子项都能挂上去

但是sku或者b都挂不上去

是什么原因?

阅读 2.5k
2 个回答

forEach只管执行回调,并不管回调是否是async。所以它不会等待await,说白了forEach是个同步操作,回调是异步是无法阻塞forEach的。建议改成for循环,或者改成Promise.all+map的方式

从代码看不出来为什么挂不上去,只能说对于 skuList 的每个元素,几乎是同时执行的 callback,如果 querySync 有顺序,就可能会出问题。

如果要按顺序,使用 for(const item of skuList) { },这样才能保证每个元素跑完了才会去处理下一个元素

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题