> Что сработает раньше: callback или promise (JavaScript)

Уровень: senior · Роль: frontend · Язык: JavaScript · Категория: Технические вопросы

Компании: ЭНИРАН

Стек: Node.js, JavaScript

> Пример ответа

В среде выполнения JavaScript (включая Node.js) callback сработает раньше, чем Promise, если они оба находятся в одном и том же синхронном потоке кода. Это связано с тем, как работают очереди событий (Event Loop) и микротаски (microtasks).

  • Callback, переданный в асинхронную функцию (например, setTimeout(callback, 0)), попадает в очередь макрозадач (macrotask queue). Он выполняется после завершения текущего синхронного кода, но до следующего цикла событий.
  • Promise (например, .then() или await) создает микротаску (microtask). Микротаски имеют более высокий приоритет и выполняются сразу после завершения текущего синхронного кода, но перед следующей макрозадачей.

Однако если callback и Promise находятся в одном и том же синхронном блоке (например, внутри функции), то Promise сработает раньше, потому что микротаски обрабатываются до макрозадач. Пример:

JAVASCRIPT
console.log('Синхронный код');
setTimeout(() => {
console.log('Callback (макрозадача)');
}, 0);
Promise.resolve().then(() => {
console.log('Promise (микротаска)');
});
// Вывод:
// Синхронный код
// Promise (микротаска)
// Callback (макрозадача)

Таким образом, в общем случае Promise (микротаска) выполняется раньше, чем callback (макрозадача), если они оба запланированы в одном контексте.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью