我正試圖找到最簡單的方法來實現等待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