#node.js #promise #sequelize.js
#node.js #обещание #sequelize.js
Вопрос:
Я изучал узел и пытался создать приложение узла, используя express и sequelize для управления данными БД.
Я уже создал модуль для подключения узла к БД. Ниже приведен код для модуля:
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:
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);
})
попробуйте это,
результат будет автоматически передан следующей функции в качестве параметра