Как объяснить работу event loop под капотом?

1. Больше интересует, как объяснить, почему после 4 идет 7? (Почему он, допустим, не продолжает цепочку? (после 4 не выводится5)
2. И как объяснить, что после 3 выводится 6 - потому что не микротаски?
Заранее благодарен за ответы.

console.log(1);

setTimeout(() => console.log(2), 0);

new Promise((resolve, reject) => resolve(console.log(3)))
.then(() => console.log(4))
.then(() => console.log(5));

new Promise((resolve, reject) => resolve(console.log(6)))
.then(() => console.log(7))
.catch(() => console.log(8))
.then(() => console.log(9))
.finally(() => console.log(10));

console.log(11);


UPD: еще такой кейс
console.log(1);

setTimeout(() => console.log(2), 0);

new Promise((resolve, reject) => resolve(console.log(6)))
  .then(() => {
    console.log(7)
    const pokemon = fetch('https://pokeapi.co/api/v2/pokemon/ditto/')
    return pokemon;
  })
  .then(() => console.log(9))
  .finally(() => console.log(10));

new Promise((resolve, reject) => resolve(console.log(3)))
  .then(() => console.log(4))
  .then(() => console.log(5));

console.log(11);
  • Вопрос задан
  • 1472 просмотра
Решения вопроса 1
Xuxicheta
@Xuxicheta
инженер
Логично же, что они выводятся в порядке попадания в стэк.
Промисы - как раз микротаски, но сначала в стэк (для микротасков - это microtask queue) отправляются 4 и 7 (в общей фазе), потом 4 выполнится и добавит 5 после 7. Потом выполнится 7 и добавит в стэк 9. Ну и так далее.
На 10 microtask queue будет исчерпан и итерация будет закончена.
А 2 выполнятеся уже в следующей итерации цикла.

upd. Поправил ответ.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы