|
2 | 2 |
|
3 | 3 | Les itérateurs asynchrones permettent d'itérer sur des données qui arrivent de manière asynchrone, à la demande. Par exemple, quand nous téléchargeons quelque chose morceau par morceau sur un réseau. Les générateurs asynchrones rendent cela encore plus pratique.
|
4 | 4 |
|
5 |
| -<<<<<<< HEAD |
6 |
| -Voyons d'abord un exemple simple, pour comprendre la syntaxe, puis examinons un cas d'utilisation réel. |
7 |
| -======= |
8 |
| -Asynchronous iterators allow us to iterate over data that comes asynchronously, on-demand. Like, for instance, when we download something chunk-by-chunk over a network. And asynchronous generators make it even more convenient. |
9 |
| ->>>>>>> fcfef6a07842ed56144e04a80c3a24de049a952a |
10 | 5 |
|
11 | 6 | ## Itérateurs asynchrones
|
12 | 7 |
|
@@ -52,17 +47,10 @@ for(let value of range) {
|
52 | 47 |
|
53 | 48 | Cette partie à déjà été aborder en détail dans le [chapitre sur les iterables](info:iterable).
|
54 | 49 |
|
55 |
| -<<<<<<< HEAD |
56 | 50 | Pour rendre l'objet itérable asynchrone :
|
57 | 51 | 1. Nous devons utiliser `Symbol.asyncIterator` au lieu de `Symbol.iterator`.
|
58 | 52 | 2. `next()` doit retourner une promesse.
|
59 | 53 | 3. Pour itérer sur un tel objet, nous devrons utiliser une boucle `for await (let item of iterable)`.
|
60 |
| -======= |
61 |
| -To make the object iterable asynchronously: |
62 |
| -1. We need to use `Symbol.asyncIterator` instead of `Symbol.iterator`. |
63 |
| -2. `next()` should return a promise. |
64 |
| -3. To iterate over such an object, we should use a `for await (let item of iterable)` loop. |
65 |
| ->>>>>>> fcfef6a07842ed56144e04a80c3a24de049a952a |
66 | 54 |
|
67 | 55 | Faisons un objet `range` itérable, comme celui d'avant, mais maintenant il retournera des valeurs de façon asynchrone, une par seconde :
|
68 | 56 |
|
@@ -117,17 +105,10 @@ let range = {
|
117 | 105 |
|
118 | 106 | Nous pouvons observer que la structure est similaire aux itérateurs réguliers :
|
119 | 107 |
|
120 |
| -<<<<<<< HEAD |
121 | 108 | 1. Pour rendre un objet itérable, asynchrone, il doit avoir une méthode `Symbol.asyncIterator` `(1)`.
|
122 | 109 | 2. Cette méthode doit retourner l'objet avec la méthode `next()` retournant une promesse `(2)`.
|
123 | 110 | 3. La méthode `next()` n'a pas besoin d'être `async`, elle peut être une méthode normale retournant une promesse, mais `async` permet d'utiliser `await`, donc c'est pratique. Ici, nous ne faisons qu'attendre une seconde `(3)`.
|
124 |
| -4. Pour itérer, nous utilisons `for await(let value of range)`(4)`, c'est-à-dire que nous ajoutons "await" après "for". Il appelle `range[Symbol.asyncIterator]()` une fois, et ensuite son `next()` pour chaque valeur. |
125 |
| -======= |
126 |
| -1. To make an object asynchronously iterable, it must have a method `Symbol.asyncIterator` `(1)`. |
127 |
| -2. This method must return the object with `next()` method returning a promise `(2)`. |
128 |
| -3. The `next()` method doesn't have to be `async`, it may be a regular method returning a promise, but `async` allows us to use `await`, so that's convenient. Here we just delay for a second `(3)`. |
129 |
| -4. To iterate, we use `for await(let value of range)` `(4)`, namely add "await" after "for". It calls `range[Symbol.asyncIterator]()` once, and then its `next()` for values. |
130 |
| ->>>>>>> fcfef6a07842ed56144e04a80c3a24de049a952a |
| 111 | +4. Pour itérer, nous utilisons `for await(let value of range)` `(4)`, c'est-à-dire que nous ajoutons "await" après "for". Il appelle `range[Symbol.asyncIterator]()` une fois, et ensuite son `next()` pour chaque valeur. |
131 | 112 |
|
132 | 113 | Voici une petite antisèche :
|
133 | 114 |
|
@@ -283,11 +264,7 @@ Maintenant, une valeur arrive chaque seconde.
|
283 | 264 |
|
284 | 265 | Jusqu'à présent, nous avons vu des exemples simples, pour acquérir une compréhension de base. Maintenant, passons en revue un cas d'utilisation réel.
|
285 | 266 |
|
286 |
| -<<<<<<< HEAD |
287 | 267 | Il existe de nombreux services en ligne qui fournissent des données par page. Par exemple, lorsque nous avons besoin d'une liste d'utilisateurs, le serveur nous répond avec un compte prédéfini (par exemple 100 utilisateurs) - "une page", et fournit une URL vers la page suivante.
|
288 |
| -======= |
289 |
| -This pattern is very common. It's not about users, but just about anything. For instance, GitHub allows us to retrieve commits in the same, paginated fashion: |
290 |
| ->>>>>>> fcfef6a07842ed56144e04a80c3a24de049a952a |
291 | 268 |
|
292 | 269 | Ce modèle est très courant. Pas seulement pour des listes d'utilisateurs, mais de n'importe quoi. Par exemple, GitHub permet de récupérer les commits de la même manière, par page :
|
293 | 270 | - Nous faisons une requête à l'URL sous la forme `https://api.github.com/repos/<repo>/commits`.
|
|
0 commit comments