从node.js中的许多表中获取数据的最佳方法

时间:2018-12-19 14:18:48

标签: mysql node.js async-await sequelize.js es6-promise

如果我的mvc项目中有一个视图,其中包含数据库中许多表的数据,那么最好的方法是在不进入厄运嵌套树的情况下获取它们

Model1.findAll().then(model1Data => {
  Model2.findAll().then(model2Data => {
    Model3.findAll().then(model3Data => {
      Modeln.findAll().then(modelnData => {
        res.render('view', {
          model1Data: model1Data,
          model2Data: model2Data,
          model3Data: model3Data,
          modelnData: modelnData
        });
      })
    })
  })
})

注意:以上查询没有where子句,联接或任何其他条件

1 个答案:

答案 0 :(得分:2)

在这里您可以使用Promise.all()async/await两种方式:

Promise.all():

const promises = [
    Model1.findAll(),
    Model2.findAll(),
    Model3.findAll(),
    Modeln.findAll()
]

Promise.all(promises).then((data) => {
    res.render('view', data );
});

异步/等待:

let model1Data = await Model1.findAll();
let model2Data = await Model2.findAll();
let model3Data = await Model3.findAll();
let modelnData = await Modeln.findAll();
res.render('view', {
    model1Data: model1Data,
    model2Data: model2Data,
    model3Data: model3Data,
    modelnData: modelnData
});
  

注意:

     

如果查询不相关,我建议使用Promise.all()   彼此之间,因为它将开始执行,而不必等待   第一个要完成,就像在异步/等待中一样。

     

更多详情: DO READ