Порядок вывода: 1, 6, 4, 2, 3, 5.
Event Loop в JavaScript: порядок выполнения Promise и вложенных setTimeout
Порядок вывода: 1, 6, 4, 2, 3, 5.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
console.log('1')
setTimeout(() => {
console.log('2')
Promise.resolve().then(() => console.log('3'))
}, 0)
Promise.resolve().then(() => {
console.log('4')
setTimeout(() => console.log('5'), 0)
})
console.log('6')
Ответ
Порядок вывода: 1, 6, 4, 2, 3, 5.
Сначала выполняется синхронный код (1, 6), затем микрозадача Promise (4). Она ставит второй таймер после уже зарегистрированного первого. Первый таймер выводит 2, а его микрозадача — 3. После этого выполняется второй таймер и выводит 5.