Обычный код JavaScript, например цикл for
в вашем примере, выполняется до того, как очереди очищены. Первое, что нужно сделать, это запустить ваш код и будет вызывать только обратные вызовы, результаты тайм-аута, результаты ввода-вывода и т. Д. после ваш код заканчивается.
В качестве примера, вы можете попробовать этот код:
fs.open('filename', 'r',() => {
console.log('File opened.');
});
for (var i = 0; i < 100000000; i++);
console.log('Loop complete.');
Независимо от того, насколько велика или мала ваша переменная цикла «Loop полного» всегда будет появляться перед «открыл файл». Это связано с тем, что только с одним потоком узел не может выполнить обратный вызов, который вы передали функции fs.open, пока код цикла не завершится.
Помните, что не существует «основной» нити, к которой узел возвращается. Большинство долговременных узловых программ довольно быстро запускаются через код в main.js, а последующий код будет поступать от обратных вызовов. Цель первоначального выполнения - определить, как и когда эти обратные вызовы происходят.
Если я чего-то не упускаю, я бы не ожидал, что for-loop будет рассматриваться как событие, которое должно обрабатываться циклом события. – Carcigenicate
'Обратные вызовы ввода/вывода: выполняет почти все обратные вызовы ...'. В узле HTTP-сервером, обрабатывающим запрос, является ввод-вывод. –
так, где будет выполняться код. Выполняется ли это через callstack? –