Skip to content

Commit 4cbffd4

Browse files
committed
minor fixes
1 parent cfb531b commit 4cbffd4

File tree

1 file changed

+50
-0
lines changed
  • 2-ui/99-ui-misc/03-event-loop/2-promise-and-timer-2

1 file changed

+50
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
Вывод в консоли: 1 7 3 5 2 6 4.
2+
3+
Задача довольно простая, нужно лишь понимать, как работают очереди микрозадач и макрозадач.
4+
5+
Давайте разберем, что здесь происходит, по шагам.
6+
7+
```js
8+
console.log(1);
9+
// Первая строка выполняется сразу и выводит `1`.
10+
// Очереди микрозадач и макрозадач на данный момент пусты.
11+
12+
setTimeout(() => console.log(2));
13+
// `setTimeout` ставит переданный колбэк в очередь макрозадач
14+
// - содержимое очереди макрозадач:
15+
// `console.log(2)`
16+
17+
Promise.resolve().then(() => console.log(3));
18+
// В очередь микрозадач ставится колбэк, выводящий `3`
19+
// - содержимое очереди микрозадач:
20+
// `console.log(3)`
21+
22+
Promise.resolve().then(() => setTimeout(() => console.log(4)));
23+
// В очередь микрозадач ставится колбэк с `setTimeout(...4)`
24+
// - содержимое очереди микрозадач:
25+
// `console.log(3); setTimeout(...4)`
26+
27+
Promise.resolve().then(() => console.log(5));
28+
// В очередь микрозадач ставится колбэк, выводящий `5`
29+
// - содержимое очереди микрозадач:
30+
// `console.log(3); setTimeout(...4); console.log(5)`
31+
32+
setTimeout(() => console.log(6));
33+
// `setTimeout` ставит переданный колбэк в очередь макрозадач
34+
// - содержимое очереди макрозадач:
35+
// `console.log(2); console.log(6)`
36+
37+
console.log(7);
38+
// Тут же выводит `7`.
39+
```
40+
41+
Итак, получается, что:
42+
43+
1. Числа `1` и `7` выводятся сразу же, так как они не используют очереди задач вообще.
44+
2. Далее после окончания основного потока кода срабатывает очередь микрозадач.
45+
- Её содержимое: `console.log(3); setTimeout(...4); console.log(5)`.
46+
- Выведется `3` и `5`, а `setTimeout(() => console.log(4))` поставит команду `console.log(4)` в конец очереди макрозадач.
47+
- В очереди макрозадач теперь: `console.log(2); console.log(6); console.log(4)`.
48+
3. Когда очередь микрозадач полностью выполнена, срабатывает очередь макрозадач. Она выведет `2`, `6`, `4`.
49+
50+
Итоговый вывод: `1 7 3 5 2 6 4`.

0 commit comments

Comments
 (0)