yield

Resum

La paraula clau yield s'utilitza per a pausar i reprendre una funci贸 generadora (function* o b茅 una funci贸 generadora obsoleta).

Sintaxi

 yield [[expressi贸]];
expressi贸
La expresssi贸 a retornar. Si s'omet es retorna undefined.

Descripci贸

La paraula clau yield causa que l'execuci贸 d'una funci贸 generadora es pausi i retorni el valor de l'expressi贸 que la segueix. La paraula clau yield es pot entendre com una versi贸 de la paraula clau return per a generadors.

La paraula clau yield retorna en realitat un objecte de tipus IteratorResult amb dues propietats: value i done. La propietat value 茅s el resultat d'evaluar l'expresssi贸 que segueix yield mentre que la propietat done 茅s de tipus boole脿 i indica si la funci贸 generadora ha completat la seva execuci贸 o no.

Un cop pausada mitjan莽ant una expressi贸 yield, l'execuci贸 de codi del generador no es reprendr脿 a no ser que s'invoqui externament mitjan莽ant la crida a la funci贸 next() del generador. Aix貌 permet un control directe de l'execuci贸 del generador i valors de retorn incrementals.

Exemples

El seg眉ent codi 茅s un exemple de la declaraci贸 d'una funci贸 generadora al llarg d'una funci贸 d'ajut.

function* foo(){
  var index = 0;
  while (index <= 2) // quan index arriba a 3,
                     // la propietat done del yield ser脿 true
                     // i el seu valor ser脿 undefined;
    yield index++;
}

Un cop la funci贸 generadora 茅s definida es pot utilitzar tot constru茂nt un iterador tal i com es mostra a continuaci贸:

var iterator = foo();
console.log(iterator.next()); // { value:0, done:false }
console.log(iterator.next()); // { value:1, done:false }
console.log(iterator.next()); // { value:2, done:false }
console.log(iterator.next()); // { value:undefined, done:true }

Especificacions

Especificaci贸 Estat Comentaris
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Yield' in that specification.
Standard Definici贸 inicial

Compatibilitat amb navegadors

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!
Caracter铆stica Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Suport b脿sic 39 26.0 (26.0) ? ? ?
Objecte IteratorResult en comptes de throwing ? 29.0 (29.0) ? ? ?
Caracter铆stica Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Suport b脿sic yes (when?) 26.0 (26.0) ? ? ?
Objecte IteratorResult en comptes de throwing ? 29.0 (29.0) ? ? ?

Notes espec铆fiques per a Firefox

  • A partir de Gecko 29 (Firefox 29 / Thunderbird 29 / SeaMonkey 2.26) la funci贸 generadora, un cop completada, no llen莽a un TypeError "generator has already finished" sino que retorna un objecte de tipus IteratorResult com per exemple { value: undefined, done: true } (errada 958951).
  • A partir de Gecko 33 (Firefox 33 / Thunderbird 33 / SeaMonkey 2.30) l'an脿lisi de l'expressi贸 que segueix al yield s'ha actualitzat per a satisfer l'especificaci贸 de ES6 (errada 981599):
    • L'expressi贸 que segueix la paraula clau yield 茅s opcional i si s'omet ja no es llen莽a SyntaxError: function* foo() { yield; }

Vegeu tamb猫