Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

334
Visualizações
Reinicie un generador delegándose a sí mismo al final

Me pregunto acerca de los inconvenientes de reiniciar un generador delegándose al final.

 function* myGenerator(){ yield "value1"; yield "value2"; yield "value3"; yield "value4"; yield* myGenerator(); } const generate = myGenerator(); for (let i = 0; i<15; i++){ document.getElementById("output").innerHTML += generate.next().value + "["+i +"]"+"<br />"; }
 <div id="output"></div>

Un inconveniente que me vino a la mente es la posibilidad de un bucle infinito si se usa como iterador. Sin embargo, se puede omitir con un contador.

 function* myGenerator(c){ let counter = c? c: 0; yield "value1"; yield "value2"; yield "value3"; yield "value4"; counter++; if (counter < 3){ yield* myGenerator(counter); } } const generate = myGenerator(); for (let val of generate){ document.getElementById("output").innerHTML += val+ "<br />"; }
 <div id="output"></div>

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Las llamadas recursivas consumirán la pila de llamadas y, en cada rendimiento, esta pila debe guardarse y restaurarse.

Su ejemplo es un caso de recursión de cola, por lo que es fácil de reescribir como un bucle:

 function* myGenerator() { while (true) { yield "value1"; yield "value2"; yield "value3"; yield "value4"; } } const generate = myGenerator(); for (let i = 0; i < 15; i++) { document.getElementById("output").innerHTML += generate.next().value + "[" + i + "]<br>"; }
 <div id="output"></div>

En cuanto a evitar que intente consumir una serie infinita, podría usar una función genérica para eso.

No relacionado, pero solo asignaría una vez a innerHTML :

 function* myGenerator() { while (true) { yield "value1"; yield "value2"; yield "value3"; yield "value4"; } } function* islice(iterator, count) { for (let value of iterator) { if (--count < 0) return; yield value; } } const generate = islice(myGenerator(), 15); const values = Array.from(generate, (value, i) => value + "[" + i + "]"); document.getElementById("output").innerHTML += values.join("<br>");
 <div id="output"></div>

about 4 years ago · Juan Pablo Isaza Relatório

0

  1. Otro caso de inifity loop/Stackoverflow:
 function* myGenerator() { // when nothing to yield temply yield* myGenerator(); }
  1. Malo para GC, demasiadas instancias creadas.
 var cur_counter = 0; function* myGenerator() { cur_counter++; console.log("current count of generator: " + cur_counter); yield 1; yield* myGenerator(); cur_counter--; // will never be called }

EDITAR

Pila de llamadas:

ingrese la descripción de la imagen aquí

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda