Коротка відповідь
juniorsetImmediate — це функція Node.js, що планує виконання колбеку після завершення поточного циклу подій і перед наступним tick‑ом. Вона корисна для розподілення довгих обчислень на окремі інтервали, щоб не блокувати event loop. Приклад: setImmediate(() => console.log('done'));
Повне пояснення
Що це і навіщо
setImmediate– асинхронна функція Node.js, що розміщує колбек у черзіimmediate.- Виконується після завершення поточного циклу подій, але до наступного
tick. - Підходить для розподілення довгих обчислень, щоб не блокувати event loop.
Ключові принципи
- Черга
immediateрозташована післяnextTick, але передsetTimeout(0). - Колбек виконується один раз, після завершення поточного циклу.
Як це працює
- В момент виклику
setImmediate(cb)колбек додається до чергиimmediate. - Після завершення поточного циклу подій Node.js переходить до черги
immediateі виконує колбек. - Після виконання колбека цикл продовжується з наступних подій.
Практика і реалізація (JavaScript/TypeScript)
import { setImmediate } from 'node:timers';
function heavyTask() {
// довге обчислення
}
setImmediate(() => {
heavyTask();
console.log('task finished');
});
Тестування (Jest)
test('setImmediate runs after current tick', done => {
let flag = false;
setImmediate(() => { flag = true; });
expect(flag).toBe(false);
setImmediate(() => {
expect(flag).toBe(true);
done();
});
});
Безпека і продуктивність
setImmediateне створює нових потоків, тому безпечна для однопоточного середовища.- Використовуйте її, коли потрібно розподілити обчислення без блокування event loop.
Часті помилки
- Очікування, що колбек виконається миттєво після
setImmediate– це не так. - Використання в браузері призведе до помилки, оскільки
setImmediateне підтримується.
Альтернативи
process.nextTick– виконується ще раніше, але може блокувати event loop.setTimeout(fn, 0)– працює в браузері, але має меншу пріоритетність.
Короткий чек‑лист
- Якщо потрібен розподіл обчислень після поточного циклу, використайте
setImmediate. - У браузері замініть на
setTimeout(fn, 0)абоqueueMicrotask. - Переконайтеся, що колбек не виконує блокуючі операції.