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

198
Visualizações
Cómo restablecer o anular un bucle asíncrono en ejecución

Tengo una función asíncrona foo con una iterate asíncrona interna que tiene un bucle. El ciclo espera una promesa interna para resolver antes de continuar. El asíncrono externo espera iterate para finalizar antes de continuar. Quiero implementar un botón de reinicio que reinicie el ciclo.

Al volver a ejecutar iterate en el controlador, se crea una nueva instancia de ejecución paralela del ciclo que se puede ejecutar hasta su finalización. El problema es que foo todavía está esperando que se complete la primera instancia. ¿Hay alguna manera de hacer esto correctamente?

 async function foo() { async function iterate() { for (let i = 0; i < 5; i++) { const position = await new Promise() // Resolves after the user does something // do stuff } } button.onclick = async () => await iterate(); // Set up event handler await iterate(); // First call // Button gets clicked -> Second call takes over // Now first call never ends and can't finish `foo()` }
about 4 years ago · Santiago Gelvez
1 Respostas
Responde à pergunta

0

Finalmente pude hacerlo usando promesas y, más específicamente, llamando a resolve() después del bucle y, lo que es más importante, en el controlador:

 async function foo() { async function iterate() { await new Promise(async (resolve) => { button.onclick = async () => { await iterate(); // Set up event handler resolve(); } for (let i = 0; i < 5; i++) { const position = await new Promise() // do stuff } resolve(); } await iterate(); }

De esa manera, incluso si el ciclo inicial nunca termina, cuando finaliza la llamada en el controlador, el controlador mismo llama a resolve() y salimos de este foo .

Esto es solo un poco engañoso, pero si alguien tiene un enfoque más conciso o directo, me complacería comprobarlo.

about 4 years ago · Santiago Gelvez 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