Node.js NodeJS:等待for循环的最简单方法

Node.js NodeJS:等待for循环的最简单方法,node.js,express,Node.js,Express,我试图找到一种最简单的方法来实现一种等待for循环在节点上完成的方法。我的设置是NodeJS+ExpressJS+SequelizeJS 以下示例正在使用管线: router.get('/today', function(req, res, next){ /* Get all created rows today */ models.prices.findAll({ order: [['createdAt', 'DESC']], limit: 10, where

我试图找到一种最简单的方法来实现一种等待for循环在节点上完成的方法。我的设置是NodeJS+ExpressJS+SequelizeJS

以下示例正在使用管线:

router.get('/today', function(req, res, next){

  /* Get all created rows today */
  models.prices.findAll({
    order: [['createdAt', 'DESC']],
    limit: 10,
    where: Sequelize.where(
      Sequelize.fn('DATE', Sequelize.col('createdAt')),
      Sequelize.literal('CURRENT_DATE')
    )
  }).then(function(changes){


    /* Get price difference per sourceId & productId */
    for (let i = 0; i < changes.length; i++) {
      models.prices.findOne({
        where: {
            productId: changes[i].productId,
            sourceId: changes[i].sourceId
        },
        order: [['createdAt', 'DESC']],
        limit: 1,
        offset: 1
      }).then(function(difference){
        /* Add price difference to array */
        changes[i]['difference'] = (changes[i].price - difference.price).toFixed(2);
      });
    }


    /* RETURN updated changes array here? */

  }).then(function(changes){
    res.render('today', {
      changes: changes
    });
  });
});
router.get('/today',函数(req、res、next){
/*立即获取所有创建的行*/
模型。价格。芬德尔({
订单:['createdAt','DESC']],
限额:10,
地点:Sequelize.where(
Sequelize.fn('DATE',Sequelize.col('createdAt')),
Sequelize.literal('CURRENT_DATE')
)
}).然后(功能(更改){
/*获取每个sourceId和productId的价格差异*/
for(设i=0;i
我是Async/Await的新手,所以我正在努力寻找一种方法将其实现到这条快速路线中(假设这是我唯一的选择)——因为这似乎不是一个承诺,所以您不能只执行then on a循环<代码>/*是否在此处返回更新的更改数组*/是我返回更改的地方,但是如果我在那里返回更改,它显然会返回未更新的更改,因为它没有等待for循环

这条路线是获取当天的价格变化行,然后获取前几行的价格差异,并将它们添加到数组中。之后,它应该将修改后的数组推到最后一个。然后从那里转到我的模板


我在这里看到了很多选择,但它开始变得混乱起来。所以我想从这里得到一些建议。

为代码添加异步/等待对。看看这对你是否有效

router.get('/today',异步函数(req、res、next){
让更改=models.prices.findAll({
订单:['createdAt','DESC']],
限额:10,
地点:Sequelize.where(
Sequelize.fn('DATE',Sequelize.col('createdAt')),
Sequelize.literal('CURRENT_DATE')
)
});
/*获取每个sourceId和productId的价格差异*/
for(设i=0;i
您可以尝试使用承诺数组解决此映射更改数组

router.get('/today', function (req, res, next) {
  /* Get all created rows today */
  models.prices.findAll({
    order: [['createdAt', 'DESC']],
    limit: 10,
    where: Sequelize.where(
      Sequelize.fn('DATE', Sequelize.col('createdAt')),
      Sequelize.literal('CURRENT_DATE')
    )
  })
  .then(function(changes) {
    let getPriceDifferencePromises = changes.map(function (change) {
      return new Promise(function (resolve, reject) {
        return models.prices.findOne({
          where: {
              productId: change.productId,
              sourceId: change.sourceId
          },
          order: [['createdAt', 'DESC']],
          limit: 1,
          offset: 1
        })
        .then(function (difference) {
          change.difference = (change.price - difference.price).toFixed(2)
          return change
        })
      })
    })

    // Start parallele promises
    return Promise.all(getPriceDifferencePromises)
  })
  .then(function (changes) {
    res.render('today', { changes: changes })
  })
})

很抱歉反应太晚,这节省了我很多时间。我甚至没有想到在路由的初始函数中添加异步功能。完美的