【发布时间】:2018-10-16 23:41:28
【问题描述】:
我有一个基本的快速路由器。对数据库进行异步调用以获取数据数组。然后,使用这个数组,我正在循环执行另一个异步调用。但我不知道如何让它按照我希望它工作的顺序工作。 代码:
const db = require('../models/index');
const router = require('express').Router();
const Op = db.Sequelize.Op;
router.get('/', async function (req, res) {
const dataSet = await db.sequelize.models.model1.findAll({
raw: true,
include: [{
model: db.sequelize.models.model2,
}, {
model: db.sequelize.models.model3,
required: true
}],
limit: 10,
order: ['flight_date']
});
dataSet.forEach(async (item) => {
delete item.id;
const mealQtyP = await db.sequelize.models.model4.findAll({
raw: true,
where: {
sampleField: sampleFieldCondition,
}
});
console.log('from cycle'); //but it logged after "shall log after all"
});
console.log('shall log after all'); //want it to be logged after all
});
module.exports = router;
【问题讨论】:
-
您希望它的工作顺序是什么?
-
使其记录“从循环”n次,然后记录“毕竟应该记录”
-
sampleFieldCondition是否可以让您运行一次findAll并通过一次调用获得所有结果,例如。使用or运算符?这将有助于减少数据库的负载,更快地执行,并可能使代码更易于阅读。 -
不,我必须为每个元素获取数据
标签: javascript node.js async-await