Node.js NodeJS:等待for循环的最简单方法
我试图找到一种最简单的方法来实现一种等待for循环在节点上完成的方法。我的设置是NodeJS+ExpressJS+SequelizeJS 以下示例正在使用管线: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
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 })
})
})
很抱歉反应太晚,这节省了我很多时间。我甚至没有想到在路由的初始函数中添加异步功能。完美的