当前位置 : 主页 > 网页制作 > Nodejs >

node.js – Promise {} – 试图等待.map

来源:互联网 收集:自由互联 发布时间:2021-06-16
我使用.map来映射一个新对象并将旧价格添加到地图中. 我正在使用Async / Await和我的数据图,这是我的代码: let datasets = await changes.map(async (data) = { let products = {}; let last = await models.prices
我使用.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包含上一次特定产品的价格变化.

退货产品没有等待,所以我收到了Promise的垃圾邮件{< pending>消息.如果我使用console.log(最后)它在内部工作,但我无法找出减慢返回的正确方法.

products.diff = last.price是需要填写的有效内容.有任何想法吗?

等待Promise上的等待,但Array.prototype.map返回一个新的Promises数组.你需要用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;
}));
网友评论