variable una puede parametro otro otra mandar llamar haber funciones funcion enviar desde dentro crear como colocar anidadas javascript node.js ecmascript-6

una - Rendimiento de Javascript de la función anidada dentro del generador.



mandar a llamar una funcion dentro de otra funcion en javascript (4)

Este código genera un error:

function *giveNumbers() { [1, 2, 3].forEach(function(item) { yield item; }) }

Esto es probablemente porque el rendimiento está dentro de una función que no es un generador. ¿Hay una manera elegante de superar esto? Me refiero a otra cosa que

function *giveNumbers() { let list = [1, 2, 3]; for (let i = 0; i < list.length; i++) { yield list[i]; } }


Esto es probablemente porque el rendimiento está dentro de una función que no es un generador.

Sí. No se puede utilizar el yield de las devoluciones de llamada.

¿Hay una manera elegante de superar esto?

Depende del caso de uso. Por lo general, no hay ninguna razón para querer yield partir de una devolución de llamada.

En su caso, usted quiere un for…of loop, que es superior a .forEach en casi todos los aspectos de todos modos:

function *giveNumbers() { for (let item of [1, 2, 3]) yield item; }


Puedes usar la sintaxis de yield * .

function *giveNumbers() { yield * [1, 2, 3].map(function(item) { return item; }) }


También puede usar while y pasar argumentos como tales ( Demo )

function *giveNumbers(array, start) { var index = start || 0; while(array.length > index + 1) { yield array[index++]; } return array[index]; } var g = giveNumbers([1,2,3], 0); var finished = false; while(!finished) { var next = g.next(); console.log(next.value); if(next.done) { finished = true; } }


rendimiento devuelve el resultado a la persona que llama.
supongamos que la forEach llamada forEach es un generador (no es un problema configurar un generador de vestuario allí). Significa que cuando la devolución de llamada yield el resultado, devuelve a forEach .

Básicamente, en tu pregunta lo que intentas hacer es:

callback -> yields to forEach -> yields to giveNumbers -> yields to caller

Por lo tanto, forEach debe forEach el resultado a giveNumbers . pero como forEach no funciona así, es imposible sin prototipos de arreglos con el disfraz para cada forEach .

En realidad, tu segundo fragmento es el más elegante para empezar.