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

255
Visualizações
¿Por qué la ejecución no se detiene en await (async/await JS)?

Estoy escribiendo una función que debería ejecutar todas las funciones asíncronas lo más rápido posible, sin embargo, solo 5 de ellas pueden ejecutarse al mismo tiempo.

Quería hacerlo usando Promise.race por lo que la implementación no es la mejor. El problema es que la ejecución del código no se detiene en await . Esperaría que esa variable de counter se reduzca solo cuando se resuelva la promesa, pero no espera a que se resuelva la promesa. El código tampoco se detiene en Promise.all , lo que me hace pensar que mi comprensión de las promesas no es adecuada. El código está debajo y la función en cuestión es runPromises .

 async function runPromises(promises, limit) { const LIMIT = limit || 10; let promsCopy = promises.slice(); let counter = 0; let queue = []; while (promsCopy.length !== 0) { if (counter < LIMIT) { let prom = promsCopy.shift(); if (prom) { queue.push(prom()); counter += 1; if (counter >= LIMIT) { let [completed] = await Promise.race( queue.map((p) => p.then((_) => [p])) ); queue.splice(queue.indexOf(completed), 1); counter -= 1; } } } } await Promise.all(queue); } // the code below is just for testing const asyncFuncLong = () => { return new Promise((resolve, reject) => { setTimeout(() => { resolve(); }, 6000); }); }; const asyncFuncShort = () => { return new Promise((resolve, reject) => { setTimeout(() => { resolve(); }, 1000); }); }; let fns = [ asyncFuncLong, asyncFuncLong, asyncFuncLong, asyncFuncLong, asyncFuncLong, asyncFuncLong, asyncFuncLong, asyncFuncLong, asyncFuncLong, asyncFuncLong, asyncFuncLong, asyncFuncLong, asyncFuncLong, asyncFuncLong, asyncFuncLong, asyncFuncLong, ]; let start = Date.now(); runPromises(fns, 10).then(() => { console.log(Date.now() - start); });

Editar: arreglado. Todo funciona ahora. ¡Gracias a los dos!

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

0

La matriz fns es una lista de funciones. Esas funciones devuelven objetos Promise . Luego está pasando esa lista de funciones a su función runPromises , que parece querer tomar una lista de objetos Promise como argumento. Pero le estás pasando una lista de funciones.

Mis sugerencias son

  • cambie la función runPromises para que realmente llame a prom() en algún momento (o simplemente use un mapa, como const r = await Promise.all(queue.map((fn) => { return fn(); })); ), o

  • cambie la definición de fns a algo así como let fns = [ asyncFuncLong(), asyncFuncShort(), asyncFuncLong(), ... ]; .

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