我有一个获取用户广告资源的函数,然后是每个元素的price
属性,其价格来自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 });
现在根据Mongo Docs,您可以使用回调调用Price.findOne,但您也可以使用promise(.then()
)调用它。这意味着你应该能够用await
来调用它,因为它会返回一个promise。但是,唉,我收到的错误是:
D:\code\some-api\api\helpers\priceUpdater.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)
它没有await
关键字,但我不能那样使用它,因为那时我会遇到异步性问题。
也许我没有正确使用async / await。有什么帮助吗?
答案 0 :(得分:0)
对于遇到相同问题的任何人(在await
或任何JS数组迭代器函数中使用.map
),我通过调用Promise.all
上的.map
来解决它然后在迭代的元素上async
。感谢@georg指针。
async function updateUserInventory(inventory, userDetails, socket) {
let newArray = await Promise.all(inv.map(async (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 });