Node.js 承诺{<;挂起>;}-尝试等待.map
我正在使用Node.js 承诺{<;挂起>;}-尝试等待.map,node.js,asynchronous,Node.js,Asynchronous,我正在使用.map绘制一个新对象,并将旧价格添加到地图中 我在数据映射中使用Async/Await,下面是我的代码: let datasets = await changes.map(async (data) => { let products = {}; let last = await models.prices.findOne({ where: { productId: data.productId, sourceId: data.so
.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;
});
变化
是过去24小时内发现的所有价格变化
last
包含上一次发现特定产品价格变化的时间
return products
没有等待,因此我收到了大量Promise{}
消息。如果我使用console.log(last)
它在内部工作,但我无法找到正确的方法来减慢返回速度
products.diff=last.price
是需要填写才能生效的一部分。有什么想法吗?等待
等待承诺,但数组.prototype.map
返回一个新的承诺数组。你需要用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;
}));
当然谢谢,很好用。我等了一段时间,然后把你的问题作为回答。@MilesCollier没问题:)如果我早一点找到这个答案,我本可以省下两天的时间。谢谢你,尤里。这就像奇迹一样。谢谢@YuryTarabanko