[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Operators/yield* [Back]  [Original]

yield* - JavaScript | MDN

Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.

View in English Always switch to English

yield*

Baseline Large disponibilit

Cette fonctionnalit est bien tablie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis septembre 2016.

Une expression yield* est utilise afin de dlguer le mcanisme d'itration/gnration un autre gnrateur ou un autre objet itrable.

Dans cet article

Exemple interactif

function* func1() {
  yield 42;
}

function* func2() {
  yield* func1();
}

const iterator = func2();

console.log(iterator.next().value);
// Expected output: 42

Syntaxe

js
yield * expression;
expression

L'expression qui renvoie un objet itrable.

Description

L'expression yield* itre sur l'oprande et gnre chaque valeur gnre par l'oprande.

La valeur de l'expression yield* est la valeur renvoye par l'itrateur lorsque celui est termin (la proprit done vaut true).

Exemples

Dlgation de la gnration

Dans le code suivant, les valeurs gnres par g1() sont renvoyes grce aux appels la fonction next(), comme pour celles renvoyes par g2().

js
function* g1() {
  yield 2;
  yield 3;
  yield 4;
}
function* g2() {
  yield 1;
  yield* g1();
  yield 5;
}

var iterator = g2();

console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 3, done: false }
console.log(iterator.next()); // { value: 4, done: false }
console.log(iterator.next()); // { value: 5, done: false }
console.log(iterator.next()); // { value: undefined, done: true }

Les autres objets itrables

yield* peut galement tre utilis avec d'autres sortes d'itrables (chanes, tableaux ou arguments) :

js
function* g3() {
  yield* [1, 2];
  yield* "34";
  yield* Array.from(arguments);
}

var iterator = g3(5, 6);

console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: "3", done: false }
console.log(iterator.next()); // { value: "4", done: false }
console.log(iterator.next()); // { value: 5, done: false }
console.log(iterator.next()); // { value: 6, done: false }
console.log(iterator.next()); // { value: undefined, done: true }

La valeur de l'expression yield*

yield* est une expression et non une instruction, elle est donc value et fournit une valeur :

js
function* g4() {
  yield* [1, 2, 3];
  return "toto";
}

var rsultat;

function* g5() {
  rsultat = yield* g4();
}

var iterator = g5();

console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 3, done: false }
console.log(iterator.next()); // { value: undefined, done: true }, g4() renvoie{ value: "toto", done: true } at this point

console.log(rsultat); // "toto"

Spcifications

Spcification
ECMAScript 2027 LanguageSpecification
# sec-generator-function-definitions-runtime-semantics-evaluation

Compatibilit des navigateurs

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page