Функция Nodejs setImmediate() Вариант использования и пример в реальном времени
Может кто-нибудь, пожалуйста, объясните пример использования функции setImmediate() в реальном времени в nodejs. Я просмотрел много блогов, но везде они приводили пример console.log с setImmediate.
1 ответ
setImmediate()
полезен, когда вы хотите отложить выполнение некоторого кода или вызвать некоторый обратный вызов, пока ПОСЛЕ того, как текущее событие не будет полностью обработано и управление не будет возвращено обратно в цикл событий.
Есть несколько разных причин, по которым вы можете захотеть это сделать:
Вы хотите, чтобы другие (уже ожидающие) события могли быть обработаны до того, как вы запустите какой-то код.
Вы хотите вызвать обратный вызов, но вы хотите вызвать его асинхронно, чтобы код вызывающего абонента, который идет после, запускался до того, как вы вызовете обратный вызов. В библиотеке nodejs есть места, где это делается, чтобы гарантировать, что обратный вызов всегда вызывается асинхронно, даже если результат известен синхронно. Это создает согласованность программирования для вызывающего, так что обратный вызов иногда не вызывается синхронно, а иногда асинхронно, что может привести к незаметным ошибкам.
Когда вы пытаетесь не блокировать цикл событий слишком долго. Вы можете запустить кусок кода, а затем вызвать
setImmediate()
и запустить следующий фрагмент кода, когдаsetImmediate()
вызывается обратный вызов и так далее. Это позволяет обрабатывать другие события, которые поступают в цикл событий между вашими фрагментами обработки.
Сделайте эту статью удобной для чтения кратким изложением
setImmediate()
,
setTimeout()
и
process.nextTick()
:
Планирование выполнения в Node.js - различия между setTimeout, setImmediate и process.nextTick.
Вот несколько примеров из исходного кода nodejs и Express:
Сокет: убедитесь, что запись отправляется асинхронно
HTTP: убедитесь, что парсер не удален, пока стек не раскрутится
Экспресс вызывает обратный вызов в маршрутизации уровня только после того, как стек раскручен
Экспресс обратный звонок
sendFile()
обратный вызов при прерывании, только после раскрутки стека