Skip to content

Commit 2557419

Browse files
Merge pull request #157
Event loop: microtasks and macrotasks
2 parents 378953a + a70d6ae commit 2557419

File tree

5 files changed

+181
-153
lines changed

5 files changed

+181
-153
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
Ieșirea din consolă este: 1 7 3 5 2 6 4.
2+
3+
Sarcina este destul de simplă, trebuie doar să știm cum funcționează microtask și macrotask queues.
4+
5+
Să vedem ce se întâmplă, pas cu pas.
6+
7+
```js
8+
console.log(1);
9+
// Prima linie se execută imediat, aceasta scoate `1`.
10+
// Macrotask și microtask queues sunt goale, deocamdată.
11+
12+
setTimeout(() => console.log(2));
13+
// `setTimeout` adaugă apelul callback la macrotask queue.
14+
// - conținutul macrotask queue:
15+
// `console.log(2)`
16+
17+
Promise.resolve().then(() => console.log(3));
18+
// Callback-ul este adăugat la microtask queue.
19+
// - conținutul microtask queue:
20+
// `console.log(3)`
21+
22+
Promise.resolve().then(() => setTimeout(() => console.log(4)));
23+
// Callback-ul cu `setTimeout(...4)` este atașat la microtask-uri
24+
// - conținutul microtask queue:
25+
// `console.log(3); setTimeout(...4)`
26+
27+
Promise.resolve().then(() => console.log(5));
28+
// Callback-ul este adăugat la microtask queue
29+
// - conținutul microtask queue:
30+
// `console.log(3); setTimeout(...4); console.log(5)` `
31+
32+
setTimeout(() => console.log(6));
33+
// `setTimeout` atașează callback-ul la macrotask-uri
34+
// - conținutul macrotask queue:
35+
// `console.log(2); console.log(6)`
36+
37+
console.log(7);
38+
// Iese 7 imediat.
39+
```
40+
41+
În sumar,
42+
43+
1. Numerele `1` и `7` apar imediat, deoarece apelurile simple `console.log` nu utilizează nici un queue.
44+
2. Apoi, după ce fluxul principal de cod este terminat, microtask queue se execută.
45+
- Aceasta are comenzile: `console.log(3); setTimeout(...4); console.log(5)`.
46+
- Numerele `3` и `5` apar, în timp ce `setTimeout(() => console.log(4))` adaugă apelul `console.log(4)` la sfârșitul macrotask queue.
47+
- Macrotask queue este acum: `console.log(2); console.log(6); console.log(4)`.
48+
3. După ce microtask queue devine goală, macrotask queue se execută. Aceasta scoate `2`, `6`, `4`.
49+
50+
În cele din urmă, avem ieșirea: `1 7 3 5 2 6 4`.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
importance: 5
2+
3+
---
4+
5+
# Care va fi ieșirea acestui cod?
6+
7+
```js
8+
console.log(1);
9+
10+
setTimeout(() => console.log(2));
11+
12+
Promise.resolve().then(() => console.log(3));
13+
14+
Promise.resolve().then(() => setTimeout(() => console.log(4)));
15+
16+
Promise.resolve().then(() => console.log(5));
17+
18+
setTimeout(() => console.log(6));
19+
20+
console.log(7);
21+
```

0 commit comments

Comments
 (0)