我正在使用.map
来映射新对象并将旧价格添加到地图中。
我正在使用Async / Await和我的数据图,这是我的代码:
let datasets = await changes.map(async (data) => {
let products = {};
let last = await models.prices.findOne({
where: {
productId: data.productId,
sourceId: data.sourceId
},
order: [['createdAt', 'DESC']],
limit: 1,
offset: 1
});
products.name = data.product.name;
products.price = data.price;
products.sku = data.product.sku;
products.source = data.source.name;
products.link = data.link;
products.diff = last.price;
return products;
});
changes
是过去24小时内发现的所有价格变化。
last
包含上一次特定产品的价格变化。
return products
不等待,因此我收到了Promise { <pending> }
条消息的垃圾邮件。如果我使用console.log(last)
它在里面工作,但我无法弄清楚减慢回报的正确方法。
products.diff = last.price
是需要填写的有效内容。有什么想法吗?
答案 0 :(得分:7)
await
等待Promises,但Array.prototype.map
返回一个新的Promise数组。你需要用Promise.all
let datasets = await Promise.all(changes.map(async (data) => {
let products = {};
let last = await models.prices.findOne({
where: {
productId: data.productId,
sourceId: data.sourceId
},
order: [['createdAt', 'DESC']],
limit: 1,
offset: 1
});
products.name = data.product.name;
products.price = data.price;
products.sku = data.product.sku;
products.source = data.source.name;
products.link = data.link;
products.diff = last.price;
return products;
}));