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

Mysql 从node.js中的多个表中获取数据的最佳方法,mysql,node.js,async-await,sequelize.js,es6-promise,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.ren

如果我的(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子句、联接或任何其他条件

这里您可以使用两种方式
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
});
异步/等待:

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
});
注意:

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() 因为它将开始执行,而不必等待 第一个像在async/await中一样完成的

更多死亡信息:


如果您已经将关联性BeETWEN继承到模型中,则可以使用包含来提取所有数据,如果不是,则可以考虑包含包含所有模型逻辑并调用每个所需函数的分离文件夹,并且,如果需要在其他视图中显示一些信息(这不是所有数据),那么这应该是有用的。async/await语法也应该适用于这种情况。我已经为模型逻辑设置了一个单独的文件夹,但是当我调用每一个模型时,同样的问题也会发生,因为返回的值将是promise,我必须使用嵌套才能随时使用它们all@vivek-多希回答应该有效!第一种方法适用于my,但第二种方法给了我以下错误:SyntaxError:await仅在异步函数中有效是的,您必须将异步放在您的函数\u func\u name()之前。查看您将了解的任何异步等待函数,