Вывод: sync, P1-a, P2, P1-b. Второй then первой цепочки ещё не готов в момент регистрации: его реакция ставится после завершения P1-a, когда P2 уже ожидает в очереди.
Почему второй Promise может обогнать второй then первого?
Вывод: sync, P1-a, P2, P1-b. Второй then первой цепочки ещё не готов в момент регистрации: его реакция ставится после завершения P1-a, когда P2 уже ожидает в очереди.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите вывод:
Promise.resolve().then(() => console.log('P1-a'))
.then(() => console.log('P1-b'));
Promise.resolve().then(() => console.log('P2'));
console.log('sync');
Ответ
Вывод: sync, P1-a, P2, P1-b. Второй then первой цепочки ещё не готов в момент регистрации: его реакция ставится после завершения P1-a, когда P2 уже ожидает в очереди.
Нельзя считать всю Promise-цепочку одной неделимой микрозадачей. Каждое звено становится доступным после результата предыдущего. Поэтому две независимые цепочки могут чередоваться. Если P1-a возвращал бы другой ожидаемый Promise, продолжение могло бы отложиться ещё сильнее; здесь callback только печатает строку.