Sequelize - 如何按顺序执行查询?

时间:2016-11-03 22:30:33

标签: javascript mysql promise sequelize.js

我使用sequelize 3.24.3连接到MySQL数据库。

我的要求是:执行查询1,然后在查询1完成后执行查询2。以下是代码示例

Student.findOne({
    where:{
        userID:request.query.userID
    }
}).then(function(data){
    Papers.findAll({
            where:{
                userID:request.query.userID
            }
        }
    )
}).then(function (papers) {
    response.json({success: true,  paper: papers,});
}).catch(function (err) {
    console.log(err);
});

当上述运行时:在findOne完成后,它会调用第二个"然后"阻止然后执行findAll查询。如何防止这种情况并让它按顺序执行查询?

1 个答案:

答案 0 :(得分:1)

由于您使用的是Sequelize,因此您还使用bluebird

您可以使用库提供的.all收集方法。阅读更多相关信息in the documentation

const Promise = require("bluebird");

Promise.all([
    Student.findOne({ where : { userID: request.query.userID } }),
    Papers.findAll({ where : { userID: request.query.userID } })
]).spread( function( student, papers ) {
    response.json({success: true,  paper: papers });
}).catch( function( error ) { 
    console.log(err);
});

这将同时执行Student.findOnePapers.findAll,在它们都返回结果后,它将使用两个结果调用spread方法。