You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Les gestionnaires de promesses `.then`/`.catch`/`.finally`sont toujours asynchrones.
5
5
6
-
Even when a Promise is immediately resolved, the code on the lines *below*`.then`/`.catch`/`.finally`will still execute before these handlers .
6
+
Même lorsqu'une promesse est immédiatement résolue, le code sur les lignes situées *ci-dessous*`.then`/`.catch`/`.finally`sera toujours exécuté avant ces gestionnaires.
If you run it, you see`code finished`first, and then`promise done!`.
18
+
Si vous exécutez, vous voyez`code finished`d'abord, puis`promise done!`.
19
19
20
-
That's strange, because the promise is definitely done from the beginning.
20
+
C'est étrange, car la promesse est certainement résolue depuis le début.
21
21
22
-
Why did the `.then`trigger afterwards? What's going on?
22
+
Pourquoi le `.then`se déclenche par la suite? Que se passe-t-il?
23
23
24
-
## Microtasks queue
24
+
## File d'attente pour microtaches
25
25
26
-
Asynchronous tasks need proper management. For that, the standard specifies an internal queue `PromiseJobs`, more often referred to as "microtask queue" (v8 term).
26
+
Les tâches asynchrones nécessitent une gestion appropriée. Pour cela, la norme spécifie une file d'attente interne `PromiseJobs`, plus souvent appelée "microtask queue" en anglais (terme v8).
27
27
28
-
As said in the [specification](https://tc39.github.io/ecma262/#sec-jobs-and-job-queues):
28
+
Comme indiqué dans la [spécification](https://tc39.github.io/ecma262/#sec-jobs-and-job-queues):
29
29
30
-
-The queue is first-in-first-out: tasks enqueued first are run first.
31
-
-Execution of a task is initiated only when nothing else is running.
30
+
-La file d'attente est premier entré, premier sorti: les tâches mises en file d'attente en premier sont exécutées en premier.
31
+
-L'exécution d'une tâche est lancée uniquement lorsque rien d'autre n'est en cours d'exécution.
32
32
33
-
Or, to say that simply, when a promise is ready, its `.then/catch/finally`handlers are put into the queue. They are not executed yet. JavaScript engine takes a task from the queue and executes it, when it becomes free from the current code.
33
+
Ou, simplement, lorsqu'une promesse est prête, ses gestionnaires `.then/catch/finally`sont mis en file d'attente. Ils ne sont pas encore exécutés. Le moteur JavaScript extrait une tâche de la file d'attente et l'exécute lorsqu'elle est libérée du code actuel.
34
34
35
-
That's why "code finished" in the example above shows first.
35
+
C'est pourquoi "code finished" dans l'exemple ci-dessus s'affiche en premier.
36
36
37
37

38
38
39
-
Promise handlers always go through that internal queue.
39
+
Les gestionnaires de promesses passent toujours par cette file d'attente interne.
40
40
41
-
If there's a chain with multiple `.then/catch/finally`, then every one of them is executed asynchronously. That is, it first gets queued, and executed when the current code is complete and previously queued handlers are finished.
41
+
S'il existe une chaîne avec plusieurs `.then/catch/finally`, chacun d'entre eux est exécuté de manière asynchrone. C'est-à-dire qu'il est d'abord mis en file d'attente et exécuté lorsque le code actuel est terminé et que les gestionnaires précédemment placés en file d'attente sont terminés.
42
42
43
-
**What if the order matters for us? How can we make `code finished`work after`promise done`?**
43
+
**Et si l'order importait pour nous? Comment pouvons-nous faire en sorte que `code finished`s'exécute après`promise done`?**
44
44
45
-
Easy, just put it into the queue with`.then`:
45
+
Facile, il suffit de le mettre dans la file d'attente avec`.then`:
46
46
47
47
```js run
48
48
Promise.resolve()
49
49
.then(() =>alert("promise done!"))
50
50
.then(() =>alert("code finished"));
51
51
```
52
52
53
-
Now the order is as intended.
53
+
Maintenant, l'ordre est comme prévu.
54
54
55
-
## Unhandled rejection
55
+
## Rejet non traité
56
56
57
-
Remember `unhandledrejection`event from the chapter<info:promise-error-handling>?
57
+
Souvenez-vous de l'événement `unhandledrejection`du chapitre<info:promise-error-handling>?
58
58
59
-
Now we can see exactly how JavaScript finds out that there was an unhandled rejection
59
+
Maintenant, nous pouvons voir exactement comment JavaScript découvre qu'il y a eu un rejet non géré
60
60
61
-
**"Unhandled rejection" occurs when a promise error is not handled at the end of the microtask queue.**
61
+
**Un rejet non traité se produit lorsqu'une erreur de promesse n'est pas traitée à la fin de la file d'attente des microtaches.**
62
62
63
-
Normally, if we expect an error, we add`.catch`to the promise chain to handle it:
63
+
Normalement, si nous nous attendons à une erreur, nous ajoutons`.catch`dans la chaîne de promesse pour la gérer:
64
64
65
65
```js run
66
66
let promise =Promise.reject(newError("Promise Failed!"));
Now, if you run it, we'll see `Promise Failed!` message first, and then `caught`.
96
+
Maintenant, si vous l'exécutez, nous verrons d'abord le message `Promise Failed!`, Puis `caught`.
97
97
98
-
If we didn't know about microtasks queue, we could wonder: "Why did `unhandledrejection`handler run? We did catch the error!".
98
+
Si nous ne connaissions pas la file d'attente des microtaches, nous pourrions nous demander: "Pourquoi le gestionnaire `unhandledrejection`a-t-il été exécuté? Nous avons détecté l'erreur!".
99
99
100
-
But now we understand that`unhandledrejection`is generated when the microtask queue is complete: the engine examines promises and, if any of them is in "rejected" state, then the event triggers.
100
+
Mais nous comprenons maintenant que`unhandledrejection`est généré à la fin de la file d'attente des microtaches: le moteur examine les promesses et, si l'une d'entre elles est à l'état "rejected", l'événement se déclenche.
101
101
102
-
In the example above, `.catch`added by`setTimeout`also triggers, but later, after `unhandledrejection`has already occurred, so that doesn't change anything.
102
+
Dans l'exemple ci-dessus, `.catch`ajouté par`setTimeout`se déclenche également, mais plus tard, après que `unhandledrejection`se soit déjà produit, cela ne change rien.
103
103
104
-
## Summary
104
+
## Résumé
105
105
106
-
Promise handling is always asynchronous, as all promise actions pass through the internal "promise jobs" queue, also called "microtask queue" (v8 term).
106
+
Le traitement des promesses est toujours asynchrone, car toutes les actions de promesse passent par la file d'attente interne "promise jobs", également appelée "file d'attente pour microtaches" (terme v8).
107
107
108
-
So, `.then/catch/finally`handlers are always called after the current code is finished.
108
+
Ainsi, les gestionnaires `.then/catch/finally`sont toujours appelés une fois le code actuel terminé.
109
109
110
-
If we need to guarantee that a piece of code is executed after`.then/catch/finally`, we can add it into a chained `.then`call.
110
+
Si nous devons garantir qu'un morceau de code est exécuté après`.then/catch/finally`, nous pouvons l'ajouter à un appel `.then`enchaîné.
111
111
112
-
In most Javascript engines, including browsers and Node.js, the concept of microtasks is closely tied with "event loop" and "macrotasks". As these have no direct relation to promises, they are covered in another part of the tutorial, in the chapter<info:event-loop>.
112
+
Dans la plupart des moteurs Javascript, y compris les navigateurs et Node.js, le concept de microtaches est étroitement lié à la "boucle d'événement" et aux "macrotaches". Comme elles n’ont pas de relation directe avec les promesses, elles sont décrites dans une autre partie du didacticiel, au chapitre<info:event-loop>.
0 commit comments