Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 承诺{<;挂起>;}-尝试等待.map_Node.js_Asynchronous - Fatal编程技术网

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