Привет, друзья!
↪ Итак, правильный ответ на вчерашнюю задачу — вариант №1: start -> end -> promise1 -> timer1 -> promise2 -> timer2
Объясняем, почему.
1. Выполняем синхронную задачу console.log("start").
2. Далее идет промис. Это асинхронная операция, и поэтому она помещается в стек микротасок. Она исполнится, как только вернется со статусом fulfilled/rejected.
3. Далее — setTimeout. Он выходит из Main Thread, поэтому также не выполняется.
4. Выполняем синхронную задачу console.log("end"), т.к. в предыдущем тике микротаска еще не была исполнена.
5. В этом же тике у нас готова микротаска. Выводим promise1 и выпускаем setTimeout из основного потока.
6. У нас вернулся timer1. В нем выводится такая же строка и запускается выполнение промиса. Тут очень важный момент — в текущем тике у нас нет синхронных задач (timer2 еще гуляет вне потока), а значит, можно сразу выполнить микротаску с выводом promise2.
7. Возвращается timer2 и выводится в консоль.
🤔 Если у вас остались вопросы — задавайте, будем разбираться вместе.
Post #285
570

- 👍 19
- 🔥 4
- ❤ 2
- 👌 2