дождитесь завершения ряда методов node.js

#node.js

#node.js

Вопрос:

У меня есть следующий код, в котором массив str будет добавлен с объектами json в функции fetchRows. Проблема в том, что он отправляет str перед извлечением значения из fetchrows. По сути, я хочу, чтобы четыре метода завершились перед отправкой массива str.

 var app = express();
app.get('/data', function (req, res) {
    str = [];
    async.waterfall([connect, execute, fetchRows], done );    
    wait.launchFiber(done);
    res.send(str);
    console.log("in done"   str);
    //res.send(str);
});
  

Оцените любые указатели.

Ответ №1:

Примечание: я не знаю асинхронности

nodejs — это система, управляемая событиями, ничто не блокирует ее, кроме как записанной заблокированным образом. Что происходит в вашем коде выше, так это когда механизм узла достигает строки

 async.waterfall([connect, execute, fetchRows], done ); 
  

Он вызывает функцию. Затем асинхронный модуль гарантирует, что connect вызывается и завершается перед выполнением функции, а затем fetchRows . Но сразу же, когда узел попадает в эту строку, он не блокируется, он вставляет, что делать в более позднее время в будущем, и переходит к строке ниже

 res.send(str);
  

Итак, очевидно, что это завершится первым

Простое решение

помните, что я не знаю асинхронности

 var app = express();
app.get('/data', function (req, res) {
    str = [];
    async.waterfall([connect, execute, fetchRows, finish], done );    

    // I don't know what this line does
    wait.launchFiber(done);

    function finish() {
        res.send(str);
    }

});
  

Что просто делает это решение, так это обернуть ваш response.send(str) в функцию и поместить в качестве последней функции, которая будет вызвана после fetchRows .