为什么数组中 forEach、Map 这样的方法中,不能使用 await 呢?
回复 (10)
A
作用域问题。用 for..of
V
V
引用 alsotang作用域问题。用 for..of
@alsotang 原始for也可以, 感谢
A
引用 varscc@alsotang 原始for也可以, 感谢
@varscc 一个并行一个串行
F
👍
D
await Promise.all(companyList.map(async value => {
if(value.status === -2){
let companyID = value.companyID;
let data = {
companyID,
Nlimit:1,
Ncount:1
}
let auditOpinion = await ctx.service.companyRecordService.findAll(data)
if(auditOpinion.length !== 0 && auditOpinion[0].auditOpinion){
auditOpinion = auditOpinion[0].auditOpinion;
value['auditOpinion'] = auditOpinion;
}
}
return value
}))
L
因为 forEach 每一次循环都创造了 async 函数, 瞬间生成了 array.length 个 async 函数,async 函数内 await 才是“阻塞”,所以成了并发。
A
因为规范没有约定。 await for of 才提出
现在可以这样用:
const results = await Promise.all(dataList.map(x => {
return asyncHandler(x);
}));
S
学习了
V
👍
参与回复
登录后即可参与回复。登录