不能在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?的主要内容,如果未能解决你的问题,请参考以下文章
.save() 无法使用 async/await 正确保存到 mongoDB
使用 es7 async/await 检查 mongodb 中是不是存在文档
MongoDB 使用 Async.js 与 $in 保持顺序 [重复]