Порядок вывода: 🍏, 🍇, 🍉, 🍋. Синхронные сообщения идут первыми, обработчик Promise — в микрозадаче, таймер — позже.
Определите, что будет выведено в консоль и почему (задание 11)
Порядок вывода: 🍏, 🍇, 🍉, 🍋. Синхронные сообщения идут первыми, обработчик Promise — в микрозадаче, таймер — позже.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите порядок вывода в консоль и объясните, почему именно в таком виде появляются данные.
const ZERO_MS = 0;
function printConsole(arg) {
console.log(arg);
}
function task1() {
printConsole('🍏');
setTimeout(printConsole, ZERO_MS, '🍋');
new Promise(resolve => {
resolve('🍉');
}).then(printConsole);
printConsole('🍇');
}
task1();
Ответ
Порядок вывода: 🍏, 🍇, 🍉, 🍋. Синхронные сообщения идут первыми, обработчик Promise — в микрозадаче, таймер — позже.
Исполнитель Promise вызывается сразу, но он лишь выполняет resolve. Сам printConsole из then попадёт в очередь микрозадач. ZERO_MS равен нулю, однако setTimeout всё равно не прерывает текущую функцию и не обгоняет её синхронные строки.