我使用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查询。如何防止这种情况并让它按顺序执行查询?
答案 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.findOne
和Papers.findAll
,在它们都返回结果后,它将使用两个结果调用spread
方法。