AsyncGenerator : méthode next()
Baseline
Widely available
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis janvier 2020.
La méthode next() des instances d'AsyncGenerator retourne la valeur suivante de la séquence.
Syntaxe
next()
next(value)
Paramètres
valueFacultatif-
Une valeur optionnelle utilisée pour modifier l'état interne du générateur. Une valeur passée à la méthode
next()sera reçue par l'expressionyield.
Valeur de retour
Une promesse (Promise) qui, une fois résolue, retourne un objet Object avec deux propriétés :
done- : Une valeur booléenne :
truesi le générateur a dépassé la fin de son flux de contrôle. Dans ce cas,valuedéfinit la valeur de retour du générateur (qui peut être une valeur indéfinie).falsesi le générateur peut encore produire des valeurs.
value- : Toute valeur JavaScript produite par l'expression de production (yield) ou retournée par le générateur.
Exemples
Utilisation de next()
L'exemple suivant montre un générateur et l'objet que la méthode next retourne :
// Une tâche asynchrone. Imaginez qu'elle fasse quelque chose
// de plus utile en pratique.
function valeurRetardee(temps, valeur) {
return new Promise((resolution, rejet) => {
setTimeout(() => resolution(valeur), temps);
});
}
async function* creerGenerateurAsync() {
yield valeurRetardee(500, 1);
yield valeurRetardee(500, 2);
yield valeurRetardee(500, 3);
}
const genAsync = creerGenerateurAsync();
genAsync.next().then((res) => console.log(res)); // { value: 1, done: false }
genAsync.next().then((res) => console.log(res)); // { value: 2, done: false }
genAsync.next().then((res) => console.log(res)); // { value: 3, done: false }
genAsync.next().then((res) => console.log(res)); // { value: undefined, done: true }
Envoyer des valeurs au générateur
Dans cet exemple, next est appelé avec une valeur.
Note : Le premier appel n'affiche rien, car le générateur n'avait pas encore produit de valeur.
// Une tâche asynchrone. Imaginez qu'elle fasse quelque chose
// de plus utile en pratique.
function attendre(temps) {
return new Promise((resolution, rejet) => {
setTimeout(resolution, temps);
});
}
async function* creerGenerateurAsync() {
while (true) {
await attendre(500);
const valeur = yield;
console.log(valeur);
}
}
async function principal() {
const genAsync = creerGenerateurAsync();
// Pas de sortie à cette étape : la première valeur envoyée via `next` est perdue
console.log(await genAsync.next(1)); // { value: undefined, done: false }
// Affiche 2 : la valeur envoyée via `next`
console.log(await genAsync.next(2)); // { value: undefined, done: false }
}
principal();
Spécifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification # sec-asyncgenerator-prototype-next |
Compatibilité des navigateurs
Voir aussi
- L'instruction
async function* - Guide des itérateurs et des générateurs