выполнение нескольких необработанных запросов не может разрешить предыдущее обещание

#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);
})
  

попробуйте это,
результат будет автоматически передан следующей функции в качестве параметра