sequelize多个原始查询无法解决以前的承诺

时间:2016-10-11 08:19:57

标签: node.js promise sequelize.js

我正在学习节点并尝试使用express和sequelize构建节点应用来管理数据库数据。

我已经为节点构建了一个连接到DB的模块。以下是该模块的代码:

sql.js:

var seq = require('./DBconfig.js');

module.exports = {
getTable1: function(o){
    return seq.query('SELECT * FROM Table1).then(function(results){
        o.table1 = results;
        return o;
    },
getTable2: function(o){
    return seq.query('SELECT * FROM Table2).then(function(results){
        o.table2 = results;
        return o;
    },
getTable3: function(o){
    return seq.query('SELECT * FROM Table3).then(function(results){
        o.table3 = results;
        return o;
    }
};

在我的应用程序中,我可以完美地逐个使用此模块。 但是,当我尝试将它们连接在一起时:

route.js:

var sql = require('./sql.js');

app.get('/test', function(req,res){
    var a = {data:[{x: 1, y:1}]};
    sql.getTable1(a).then(sql.getTable2(result1)).then(
        sql.getTable3(result2)).then(function(result3){
             console.log(result3);
             res.send(result3);
    })
}

始终返回:ReferenceError:未定义result1。 如何才能使承诺工作以正确传递解决方案?

1 个答案:

答案 0 :(得分:-1)

sql.getTable1(a).then(sql.getTable2(result1)).then(
    sql.getTable3(result2)).then(function(result3){
         console.log(result3);
         res.send(result3);
})

如果用()编写函数, 它将被直接调用并用结果替换fn(something) 这意味着sql.getTable2(result1)实际上是一个结果

sql.getTable1(a).then(sql.getTable2).then(
    sql.getTable3).then(function(result3){
         console.log(result3);
         res.send(result3);
})

试试这个, 结果将自动作为参数

传递给下一个函数