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
相关产品推荐
相关产品推荐

