Как ловко работает в nodejs?
Я пытаюсь понять, как использовать проворный для управления потоком с помощью nodejs, но у меня возникают проблемы с пониманием, как это на самом деле работает, и нет никакой документации, объясняющей это (что я мог бы найти)
Например, возьмите этот код из документации:
_.parallel([
function (callback) {
setTimeout(function () {
console.log('one');
callback();
}, 25);
},
function (callback) {
setTimeout(function () {
console.log('two');
callback();
}, 0);
}
]);
У меня возникают проблемы с пониманием аргумента обратного вызова, который принимают функции, что фактически передается в качестве обратного вызова? Следующая функция в строке? Если это так, то почему вторая (и последняя) функция также выполняет callback()? Если больше нет функций для запуска, то какой в этом смысл? Спасибо!
Я сделал свой маленький тест и вынул обратные вызовы:
var flow = require('nimble');
flow.parallel([
function() {
setTimeout(function() {
console.log('this happens');
}, 3000);
},
function() {
setTimeout(function() {
console.log('and this happens at the same time');
}, 3000);
}
]);
И код работает так же, как если бы мне передавали обратные вызовы, так что теперь я чувствую, что действительно не понимаю, что делают аргументы обратного вызова.
2 ответа
У меня возникают проблемы с пониманием аргумента обратного вызова, который принимают функции, что фактически передается в качестве обратного вызова?
Обратный вызов здесь для подтверждения того факта, что асинхронная операция завершена. Вам не нужно знать, что делает обратный вызов, только то, что он принимает в качестве аргументов.
это называется продолжением прохождения. => с учетом функции и обратного вызова в качестве аргумента, обратный вызов после его выполнения будет "продолжать" то, что делает тот, кто отвечает за поток управления.
В конечном итоге вы можете передать объект ошибки в обратный вызов в качестве первого аргумента, чтобы получить ошибку, если асинхронная операция не удалась. Возможно, вы захотите взглянуть на пакет async на npm для дальнейших объяснений по этому вопросу.
При управлении последовательным потоком при последовательном выполнении ряда асинхронных задач мы используем «обратные вызовы». один из таких примеров функции setTimeout для многократного выполнения одной и той же функции setTimeout, заданной для различных исполнений (асинхронные задачи последовательно), одно за другим, требует пристального внимания при выполнении кода. В описанной выше ситуации можно использовать инструмент управления потоком данных, такой как Nimble (npm install nimble), который облегчает жизнь и предоставляет Nimble набор функций для выполнения, очень аккуратно одну за другой.