Порядок: promise baz, initial flow, promise foo, promise fez, promise bar, timeout 0. Executor new Promise выполняется сразу, а then — через микрозадачу.
Асинхронный вывод и приоритеты очередей
Порядок: promise baz, initial flow, promise foo, promise fez, promise bar, timeout 0. Executor new Promise выполняется сразу, а then — через микрозадачу.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Выполнить код‑ревью: исследовать порядок исполнения и приоритеты задач (macrotask vs microtask).
setTimeout(() => {
console.log('timeout 0');
});
Promise.resolve()
.then(() => {
console.log('promise foo');
})
.then(() => {
console.log('promise bar');
});
const promise = new Promise((resolve, reject) => {
console.log('promise baz');
resolve(true);
});
promise.then(() => {
console.log('promise fez');
});
console.log('initial flow');
Ответ
Порядок: promise baz, initial flow, promise foo, promise fez, promise bar, timeout 0. Executor new Promise выполняется сразу, а then — через микрозадачу.
Foo уже стоит в очереди, когда добавляется fez. Во время foo следующий then с bar только становится доступным и добавляется после fez. Таймер выполняется, когда синхронный код и готовая очередь микрозадач завершены.