Порядок: 🍏, 🍈, 🍉, 🍇, 🍍, 🍌, 🍋. Микрозадача с бананом выполняется после первого таймера, но до второго таймера с лимоном.
Что напечатает консоль в примере №12
Порядок: 🍏, 🍈, 🍉, 🍇, 🍍, 🍌, 🍋. Микрозадача с бананом выполняется после первого таймера, но до второго таймера с лимоном.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите порядок вывода в консоль и объясните, почему именно так происходит.
const ZERO_MS = 0;
function printConsole(arg) {
console.log(arg);
}
function task2() {
printConsole('🍏');
setTimeout(() => {
printConsole('🍍');
Promise.resolve('🍌').then(printConsole);
}, ZERO_MS);
setTimeout(printConsole, ZERO_MS, '🍋');
Promise.resolve('🍉').then(printConsole);
Promise.resolve('🍇').then(printConsole);
printConsole('🍈');
}
task2();
Ответ
Порядок: 🍏, 🍈, 🍉, 🍇, 🍍, 🍌, 🍋. Микрозадача с бананом выполняется после первого таймера, но до второго таймера с лимоном.
В теле task2 синхронно печатаются яблоко и дыня. После завершения текущего кода очередь then последовательно выводит арбуз и виноград.
Первый таймер выводит ананас и регистрирует then для уже завершённого Promise с бананом. Перед переходом к следующей задаче event loop выполняет эту микрозадачу. Затем второй таймер получает лимон как дополнительный аргумент setTimeout и выводит его. Нулевая задержка не означает выполнение таймера прямо в месте регистрации.