#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 .