JackShcherbakov
@JackShcherbakov

SetImmediate срабатывает до коллбэка. Почему?

Здравствуйте!

Есть код:

var fs = require('fs');

fs.open(__filename, "r", function(err, file){
	console.log("IO!");
});

setImmediate(function(){
	console.log("immidiate");
});

process.nextTick(function(){
	console.log("nextTick!");
});


Результат:
nextTick!
immidiate
IO!


Хотя в скринкасте https://learn.javascript.ru/screencast/nodejs#node... точно такой же код дает такой вывод:

nextTick!
IO!
immidiate


Почему?

Заранее выражаю огромную благодарность всем, кто поможет!

UPD:

В документации же написано:
Schedules the "immediate" execution of the callback after I/O events' callbacks.
  • Вопрос задан
  • 213 просмотров
Пригласить эксперта
Ответы на вопрос 1
bingo347
@bingo347 Куратор тега Node.js
Crazy on performance...
process.nextTick - выполняется в ближайший микротаск (в данном случае будет на текущей итерации event-loop, сразу после всех синхронных действий)
setImmediate - сразу кидает функцию в конец очереди event-loop
fs.open - сначала дождется завершения IO операции, и только потом окажется в очереди event-loop

теоретически IO операция может завершится раньше вызова setImmediate, тогда колбэк fs.open вызовется раньше, так как попал в очередь раньше
но чаще всего раньше все же будет setImmediate
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы