我正试图找到最简单的方法来实现等待for循环完成节点的方法。我的设置是NodeJS + ExpressJS + SequelizeJS。NodeJS:等待for循环的最简单方法
下面的例子是使用路由:
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
});
});
});
我的童话在异步/等待新的,所以我在努力寻找一种方法来实现它进入这个快速通道(假设这是我唯一的选择) - 因为看起来你不能只是做一个循环,因为它不是一个承诺。 /* RETURN updated changes array here? */
是我要返回更改的地方,但是如果我在那里返回更改,它显然会返回未更新的更改,因为它没有等待for循环。
此路线取得当天价格变化的行数,然后获取前一行的价格差异并将它们添加到数组中。之后它应该将修改后的数组推到最后。然后从那里进入我的模板。
我在这里看到很多选择,但它开始变得混乱。所以我想从这里得到一些建议。
对不起,反应迟缓的数组,这为我节省了很多时间。我甚至没有想过将异步功能添加到路由的初始功能。完善! –
不客气=)很高兴它的帮助。 – Val