[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Generator/return [Back]  [Original]

Generator : mthode return() - 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

Generator : mthode return()

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.

La mthode return() des instances de Generator agit comme si une instruction return tait insre dans le corps du gnrateur la position actuelle de suspension, ce qui termine le gnrateur et permet au gnrateur d'effectuer toutes les tches de nettoyage lorsqu'elle est combine avec un bloc try...finally.

Dans cet article

Syntaxe

js
generatorInstance.return()
generatorInstance.return(value)

Paramtres

value Facultatif

La valeur retourner.

Valeur de retour

Un Object possdant deux proprits :

done

Une valeur boolenne :

  • true si le flux de contrle de la fonction gnratrice a atteint la fin.
  • false si le flux de contrle de la fonction gnratrice n'a pas atteint la fin et peut produire d'autres valeurs. Cela ne peut arriver que si le return est captur dans un bloc try...finally et qu'il y a d'autres expressions yield dans le bloc finally.
value

La valeur donne comme argument, ou, si l'expression yield est enveloppe dans un bloc try...finally, la valeur produite/retourne par le bloc finally.

Exceptions

TypeError

Leve si le gnrateur est dj en cours d'excution.

Description

La mthode return(), lorsqu'elle est appele, peut tre considre comme si une instruction return valeur; tait insre dans le corps du gnrateur la position actuelle de suspension, o valeur est la valeur passe la mthode return(). Ainsi, dans un flux typique, appeler return(valeur) retournera { done: true, value: valeur }. Cependant, si l'expression yield est enveloppe dans un bloc try...finally, le flux de contrle ne quitte pas le corps de la fonction, mais passe au bloc finally la place. Dans ce cas, la valeur retourne peut tre diffrente, et done peut mme tre false, s'il y a d'autres expressions yield dans le bloc finally.

Exemples

Utiliser la mthode return()

L'exemple suivant illustre une utilisation simple d'un gnrateur et de la mthode return().

js
function* gen() {
  yield 1;
  yield 2;
  yield 3;
}

const g = gen();

g.next(); // { value: 1, done: false }
g.return("toto"); // { value: "toto", done: true }
g.next(); // { value: undefined, done: true }

Si return(valeur) est appel sur un gnrateur qui est dj dans l'tat  termin , le gnrateur restera dans l'tat  termin .

Si aucun argument n'est fourni, la proprit value de l'objet retourn sera undefined. Si un argument est fourni, il deviendra la valeur de la proprit value de l'objet retourn, sauf si l'expression yield est enveloppe dans un bloc try...finally.

js
function* gen() {
  yield 1;
  yield 2;
  yield 3;
}

const g = gen();
g.next(); // { value: 1, done: false }
g.next(); // { value: 2, done: false }
g.next(); // { value: 3, done: false }
g.next(); // { value: undefined, done: true }
g.return(); // { value: undefined, done: true }
g.return(1); // { value: 1, done: true }

Utiliser la mthode return() avec try...finally

Le fait que la mthode return ait t appele ne peut tre connu du gnrateur lui-mme que si l'expression yield est enveloppe dans un bloc try...finally.

Lorsque la mthode return est appele sur un gnrateur qui est suspendu dans un bloc try, l'excution dans le gnrateur passe au bloc finally puisque le bloc finally des instructions try...finally s'excute toujours.

js
function* gen() {
  yield 1;
  try {
    yield 2;
    yield 3;
  } finally {
    yield "nettoyage";
  }
}

const g1 = gen();
g1.next(); // { value: 1, done: false }

// L'excution est suspendue avant le bloc try...finally.
g1.return("retour anticip"); // { value: 'retour anticip', done: true }

const g2 = gen();
g2.next(); // { value: 1, done: false }
g2.next(); // { value: 2, done: false }

// L'excution est suspendue dans le bloc try...finally.
g2.return("retour anticip"); // { value: 'nettoyage', done: false }

// La valeur de compltion est prserve
g2.next(); // { value: 'retour anticip', done: true }

// Generator is in the completed state
g2.return("retour tardif"); // { value: 'retour tardif', done: true }

La valeur de retour du bloc final peut galement devenir la valeur (value) du rsultat retourn par l'appel return.

js
function* gen() {
  try {
    yield 1;
  } finally {
    return "nettoyage";
  }
}

const generator = gen();
generator.next(); // { value: 1, done: false }
generator.return("retour anticip"); // { value: 'nettoyage', done: true }

Spcifications

Spcification
ECMAScript 2027 LanguageSpecification
# sec-generator.prototype.return

Compatibilit des navigateurs

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page