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都挂不上去
是什么原因?
forEach只管执行回调,并不管回调是否是async。所以它不会等待await,说白了forEach是个同步操作,回调是异步是无法阻塞forEach的。建议改成for循环,或者改成Promise.all+map的方式