我正在学习节点并尝试使用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。 如何才能使承诺工作以正确传递解决方案?
答案 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);
})
试试这个, 结果将自动作为参数
传递给下一个函数