В следующем коде я пытаюсь понять концепцию написания асинхронных функций JavaScript. Чтобы быть ясным из моих предположений:Запись асинхронного метода в Javascript (код в Node.js)
Вызывается функция logTest(). Он вызывает asyncTest(), передавая функцию log(). Однако asyncTest() не вызывает log() напрямую. Скорее, он передает его в очередь событий, вызываемую при очистке стека. Стек не должен очищаться до тех пор, пока цикл for не завершится, написав двадцать «ожидающих ...». Тем не менее, консольный вывод помещает строку «async» сначала перед циклом for. Я запустил этот код в Node.js, в котором console.log является синхронной функцией. Кто-нибудь знает, почему строка «async» не была написана последней?
function asyncCall(method) {
return setTimeout(method, 0);
}
function log(str) { console.log(str); }
function logTest() {
asyncCall(log("async"));
for(var i = 0; i < 20; i++) {
log("waiting...");
}
}
logTest();
Возможный дубликат [Node.js Event loop] (http://stackoverflow.com/questions/25568613/node-js-event-loop) – Epicblood