При обычном выполнении браузерного примера порядок будет: 1, 2, 7, 10, 9, 6, 5, 8, 4, 3.
Задача
При обычном выполнении браузерного примера порядок будет: 1, 2, 7, 10, 9, 6, 5, 8, 4, 3.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Задача
- В каком порядке выведутся значения?
console.log('1');
Promise.resolve(console.log('2'));
setTimeout(function cb1() {
console.log('3');
}, 2000);
Promise.resolve().then(() => setTimeout(() => console.log('4')));
setTimeout(function cb3() {
Promise.resolve('5').then(console.log);
console.log('6');
});
console.log('7');
setTimeout(function cb4() {
console.log('8');
}, 0);
new Promise((res) => res('9')).then(console.log);
console.log('10');
Ответ
При обычном выполнении браузерного примера порядок будет: 1, 2, 7, 10, 9, 6, 5, 8, 4, 3.
console.log('2') вызывается синхронно при вычислении аргумента Promise.resolve. Затем микрозадача планирует таймер 4, а другая печатает 9. Нулевой таймер печатает 6, его микрозадача — 5; далее идут ранее поставленный 8 и затем 4. Таймер 3 ждёт 2000 мс; задержки таймеров не являются точным временем исполнения.