不能在MongoDB Model上使用async / await,即使它返回Promise?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不能在MongoDB Model上使用async / await,即使它返回Promise?相关的知识,希望对你有一定的参考价值。

我有一个函数获取用户库存,然后它的每个元素qazxsw poi属性与从qazxsw poi获得的价格。

这是(不是整个功能,但我在这里得到错误):

price

现在根据Mongo Docs,您可以使用回调调用Price.findOne,但您也可以使用promise(Price Collection)调用它。这意味着你应该能够用async function updateUserInventory(inventory, userDetails, socket) { let newArray = await inv.map(item => { let price = await Price.findOne({ market_hash_name: item.market_hash_name }); return { price: price.price } logger.debug(JSON.stringify(item, null, 2)); }); socket.emit('user inv', { items: newArray }); 调用它,因为它返回一个promise。但是,唉,我收到的错误是这样的:

.then()

它没有await关键字,但我不能像那样使用它,因为那时我会遇到异步性问题。

也许我没有正确使用async / await。有帮助吗?

答案

对于遇到相同问题的任何人(在D:codesome-apiapihelperspriceUpdater.js:129 let price = await Price.findOne({ market_hash_name: item.market_hash_name }); ^^^^^ SyntaxError: Unexpected identifier at createScript (vm.js:80:10) at Object.runInThisContext (vm.js:139:10) at Module._compile (module.js:607:28) at Object.Module._extensions..js (module.js:654:10) at Module.load (module.js:556:32) at tryModuleLoad (module.js:499:12) 或任何JS数组迭代器函数中使用await),我通过在await上调用.map然后在迭代的元素上调用Promise.all来解决它。感谢@georg指针。

.map

以上是关于不能在MongoDB Model上使用async / await,即使它返回Promise?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 async/await 查询 MongoDB?

.save() 无法使用 async/await 正确保存到 mongoDB

使用 es7 async/await 检查 mongodb 中是不是存在文档

MongoDB 使用 Async.js 与 $in 保持顺序 [重复]

MongoDB 使用 Async.js 与 $in 保持顺序 [重复]

c# await 不能作用于 async上?