You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Async函数调用Async函数时,多个await能否省略?如何取舍?

关于代码中await的保留问题

先看你的代码:

async function foo() {
    return await db.collection("users").find({user_id:id}).toArray();
}

async function bar() {
    await foo()
}

1. 是否需要保留两个await?

不需要,两个await里有一个是多余的。

2. 可以省略哪一个?

应该移除foo函数里的await。因为async函数的特性是:不管你return的是普通值还是Promise对象,它都会自动把返回值包装成一个resolved状态的Promise。而db.collection(...).find(...).toArray()本身返回的就是Promise,所以直接return这个Promise就行,加await多此一举,不会改变最终结果。

修改后的foo函数可以写成:

async function foo() {
    return db.collection("users").find({user_id:id}).toArray();
}

3. 如果需要在bar函数中使用foo的返回结果,应保留哪个await?

必须保留bar函数里的await。因为调用foo()会返回一个Promise,只有用await才能拿到它最终解析出来的用户数组结果。而foo里的await依然可以去掉,不影响bar获取结果。

比如修改后的bar函数:

async function bar() {
    const users = await foo();
    // 后续可以正常使用users变量
    console.log(users);
}

内容的提问来源于stack exchange,提问作者JobHunter69

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 03:12:04