Порядок: 1, 3, 9, 4, 5, 7, 6, 8, 2. Executor нового Promise печатает 3 синхронно, а цепочки then чередуются через очередь микрозадач.
Определение последовательности вывода в консоль (задача 67)
Порядок: 1, 3, 9, 4, 5, 7, 6, 8, 2. Executor нового Promise печатает 3 синхронно, а цепочки then чередуются через очередь микрозадач.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В какой последовательности будут напечатаны сообщения, вызванные console.log?
console.log('1');
setTimeout(() => {
console.log('2');
});
new Promise((resolve, reject) => {
console.log('3');
resolve();
}).then(() => {
console.log('4');
});
Promise.resolve().then(() => {
console.log('5');
}).then(() => {
console.log('6');
});
Promise.resolve().then(() => {
console.log('7');
}).then(() => {
console.log('8');
});
console.log('9');
Ответ
Порядок: 1, 3, 9, 4, 5, 7, 6, 8, 2. Executor нового Promise печатает 3 синхронно, а цепочки then чередуются через очередь микрозадач.
После синхронных 1, 3 и 9 очередь уже содержит обработчики с 4, 5 и 7. При выполнении 5 появляется новая микрозадача с 6, но 7 уже стояла в очереди раньше. Аналогично обработчик 7 добавляет 8 после 6.
Поэтому сначала выполняются 4, 5, 7, затем 6 и 8. Таймер с 2 — отдельная задача и идёт после освобождения очереди микрозадач.