Порядок вывода: 1, 6, 3, 5, 2, 4, 7. Promise с 4 ждёт отдельный таймер, поэтому его then не входит в начальную очередь готовых микрозадач.
Порядок вывода в консоль (пример 106)
Порядок вывода: 1, 6, 3, 5, 2, 4, 7. Promise с 4 ждёт отдельный таймер, поэтому его then не входит в начальную очередь готовых микрозадач.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Какой будет порядок печати в консоль?
console.log(1);
setTimeout(() => console.log(2), 0);
Promise.resolve(3).then(console.log);
new Promise(resolve => setTimeout(resolve, 0)).then(() => console.log(4));
Promise.reject(5).catch(console.log);
console.log(6);
setTimeout(() => console.log(7), 0);
Ответ
Порядок вывода: 1, 6, 3, 5, 2, 4, 7. Promise с 4 ждёт отдельный таймер, поэтому его then не входит в начальную очередь готовых микрозадач.
Синхронно печатаются 1 и 6. Уже завершённые Promise ставят then с 3 и catch с 5, которые выполняются следующими.
Потом запускается таймер 2. Следующий таймер разрешает Promise для 4; его микрозадача выполняется до перехода к оставшемуся таймеру 7. Нельзя просто собрать все сообщения Promise перед всеми setTimeout: важно, когда именно каждый Promise становится завершённым.