Задать вопрос
@alex_vma

Почему setTimeout выполняется быстрее setImmediate?

Последовательность выполнения обозначил в комментариях
console.log('console.log 1')//1
setTimeout(() => console.log('setTimeout'), 0)//3
setImmediate(() => console.log('setImmediate'))//4
console.log('console.log 2')//2

и другой пример:
console.log('console.log 1')//1
fs.readFile('./views/about.html', 'utf8', (err,data) => {
    setTimeout(() => console.log('setTimeout'), 0)//4
    setImmediate(() => console.log('setImmediate'))//3
})
console.log('console.log 2')//2

В первом случае таймаут быстрее потому что в цикле событий таймеры имеют приоритет над циклом "Check", но и как бы setImmediate должен иметь преимущество над setTimeout. В общем, помогите разобраться, почему так.
  • Вопрос задан
  • 361 просмотр
Подписаться 1 Простой 7 комментариев
Решения вопроса 1
Lynn
@Lynn
nginx, js, css
Потому что так повезло. Это не гарантия.

https://nodejs.org/en/docs/guides/event-loop-timer...

For example, if we run the following script which is not within an I/O cycle (i.e. the main module), the order in which the two timers are executed is non-deterministic, as it is bound by the performance of the process: [...]

However, if you move the two calls within an I/O cycle, the immediate callback is always executed first:
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Aetae
@Aetae
Тлен
Вот годный ответ, раскладывает всё по полочкам(конкретный ответ в коментах):
https://stackoverflow.com/questions/55467033/diffe...
В Node ажно 4 очереди для по сути одного и того же(2 от самой ноды 2 от v8). :)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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