CNode

有个疑问,为什么数组中 forEach、Map 这样的方法中,不能使用 await 呢?

问答
Vvarscc发布于8 年前最后回复8 年前10 回复5108 浏览0 收藏

为什么数组中 forEach、Map 这样的方法中,不能使用 await 呢?

查看回复

回复 (10)

A
alsotang#1·8 年前

作用域问题。用 for..of

V
varscc#3·8 年前
引用 alsotang作用域问题。用 for..of

@alsotang 原始for也可以, 感谢

A
atian25#4·8 年前
引用 varscc@alsotang 原始for也可以, 感谢

@varscc 一个并行一个串行

F
fuxingZhang#5·8 年前

👍

D
dengnan123#6·8 年前
            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
liangtongzhuo#7·8 年前

因为 forEach 每一次循环都创造了 async 函数, 瞬间生成了 array.length 个 async 函数,async 函数内 await 才是“阻塞”,所以成了并发。

A
atian25#8·8 年前

因为规范没有约定。 await for of 才提出

现在可以这样用:

const results = await Promise.all(dataList.map(x => {
  return asyncHandler(x);
}));

或者用 https://github.com/sindresorhus/promise-fun

S
Sxs7513#9·8 年前

学习了

V
varscc#10·8 年前

👍

参与回复
登录后即可参与回复。登录