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

标签 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 完成后调用第二个“then” block ,然后执行 findAll 查询。我怎样才能防止这种情况发生并让它按顺序执行查询?

最佳答案

由于您使用的是 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 方法结果。

关于javascript - Sequelize - 如何按顺序执行查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40412324/

相关文章:

mysql - 内连接子查询 Django ORM 等效

PHP & 可湿性粉剂 : try catch not working when error from DB is thrown

node.js - NodeJS Promise Firebase

arrays - 向 bluebird 提供一个数组,调用 API,然后将结果集成到单个 JSON 输出中

javascript - 如何用科学记数法格式化数字以在 Javascript 中显示更少的数字?

javascript - 在其他函数中使用 var 在 CKeditor 中进行选择

mysql - 我在使用 sql 创建触发器的代码中存在语法错误。我使用mysql版本14.14

javascript - AngularJS 和 Thymeleaf 之间的冲突

javascript - 隐藏元素后滚动到顶部不起作用 (jQuery)

javascript - 动态添加到 Promise 数组时,Promise 全部提前完成