| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Operators/yield | [Back] [Original] |
Get to know MDN better
Esta pgina ha sido traducida del ingls por la comunidad. Aprende ms y nete a la comunidad de MDN Web Docs.
This feature is well established and works across many devices and browser versions. Its been available across browsers since septiembre de 2016.
La palabra clave yield se usa para pausar y reanudar una funcin generadora (function* o funcin generadora heredada).
function* foo(index) {
while (index < 2) {
yield index;
index++;
}
}
const iterator = foo(0);
console.log(iterator.next().value);
// Expected output: 0
console.log(iterator.next().value);
// Expected output: 1
[rv] = yield [expression]
expression OpcionalDefine el valor que se devolver desde la funcin generadora a travs del protocolo iterador. Si se omite, devuelve undefined en su lugar.
rv OpcionalRecupera el valor opcional pasado al mtodo next() del generador para reanudar su ejecucin.
La palabra clave yield detiene la ejecucin de la funcin del generador y el valor de la expresin que sigue a la palabra clave yield se devuelve al llamador del generador. Se puede considerar como una versin basada en un generador de la palabra clave return.
yield solo se puede llamar directamente desde la funcin generadora que la contiene. No se puede llamar desde funciones anidadas o retrollamadas.
La palabra clave yield hace que la llamada al mtodo next() del generador devuelva un objeto IteratorResult con dos propiedades: value y done. La propiedad value es el resultado de evaluar la expresin yield, y done es false, lo cual indica que la funcin generadora no se ha completado completamente.
Una vez en pausa en una expresin yield, la ejecucin del cdigo del generador permanece en pausa hasta que se llama al mtodo next() del generador. Cada vez que se llama al mtodo next() del generador, el generador reanuda la ejecucin y se ejecuta hasta que alcanza uno de los siguientes:
yield, el cual hace que el generador vuelva a pausar y devuelva el nuevo valor del generador. La prxima vez que se llame a next(), la ejecucin se reanudar con la instruccin inmediatamente despus de yield.throw se usa para lanzar una excepcin desde el generador. Esta detiene la ejecucin del generador por completo y la ejecucin se reanuda en el llamador (como suele ser el caso cuando se lanza una excepcin).IteratorResult al llamador en el que el value es undefined y done es true.return. En este caso, la ejecucin del generador finaliza y se devuelve un IteratorResult al llamador en el que el value es el valor especificado por la instruccin return y done es true.Si se pasa un valor opcional al mtodo next() del generador, ese valor se convierte en el valor devuelto por la operacin yield actual del generador.
Entre la ruta del cdigo del generador, sus operadores yield y la capacidad de especificar un nuevo valor inicial pasndolo a Generator.prototype.next(), los generadores ofrecen enorme poder y control.
Advertencia:
Desafortunadamente, next() es asimtrico, pero eso no se puede evitar: siempre enva un valor al yield actualmente suspendido, pero devuelve el operando del siguiente yield.
yieldEl siguiente cdigo es la declaracin de una funcin generadora de ejemplo.
function* countAppleSales() {
let saleList = [3, 7, 5];
for (let i = 0; i < saleList.length; i++) {
yield saleList[i];
}
}
Una vez que se define una funcin generadora, se puede usar construyendo un iterador como el siguiente.
let appleStore = countAppleSales(); // Generator { }
console.log(appleStore.next()); // { value: 3, done: false }
console.log(appleStore.next()); // { value: 7, done: false }
console.log(appleStore.next()); // { value: 5, done: false }
console.log(appleStore.next()); // { value: undefined, done: true }
Tambin puedes enviar un valor con next(value) al generador. 'step' se evala como un valor de retorno en esta sintaxis [rv] = yield [expression]
function* counter(value) {
let step;
while (true) {
step = yield ++value;
if (step) {
value += step;
}
}
}
const generatorFunc = counter(0);
console.log(generatorFunc.next().value); // 1
console.log(generatorFunc.next().value); // 2
console.log(generatorFunc.next().value); // 3
console.log(generatorFunc.next(10).value); // 14
console.log(generatorFunc.next().value); // 15
console.log(generatorFunc.next(10).value); // 26
| Specification |
|---|
| ECMAScript 2027 LanguageSpecification # prod-YieldExpression |
This page was last modified on 29 may 2026 by MDN contributors.
Your blueprint for a better internet.
Portions of this content are 19982026 by individual mozilla.org contributors. Content available under a Creative Commons license.
| Web Proxy Viewer | New URL | Original Page |