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

82
Visualizações
¿Cómo ejecutar código mientras se espera que se resuelva una promesa?

Echa un vistazo a este código de ejemplo:

 var arrayToSend = [1,2,3,4,5,6,7,8,9] function send(x){ // 'sends' the value. resolves after 1 second. return new Promise(resolve=>{ setTimeout(()=>{ resolve() console.log('sent '+x) },1000) }) } function calculate(x){return x**2} // just an example, there would be something expensive here. async function loopAndSendArray(){ for (let val of arrayToSend){ let calculatedVal = calculate(val) //calculate this when waiting for the send promise to finish BUT don't send the value until it's resolved await send(calculatedVal)} }

Me gustaría que el script llame al calculate() para el siguiente valor cuando está esperando que finalice la promesa de send() del valor anterior (para ahorrar tiempo que de otro modo se gastaría en calcularlo después de la promesa). No llamaría al siguiente send() con el siguiente valor hasta que se resuelva el primero.

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

0

En lugar de esperar la llamada para send , asigne la llamada a una variable externa y luego await después de llamar al calculate en la siguiente iteración.

 var arrayToSend = [1, 2, 3, 4, 5, 6, 7, 8, 9] function send(x) { return new Promise(resolve => { setTimeout(() => { resolve() console.log('sent ' + x) }, 1000) }) } function calculate(x) { return x ** 2 } async function loopAndSendArray() { let lastSend; for (const val of arrayToSend) { const calculatedVal = calculate(val); await lastSend; lastSend = send(calculatedVal) } await lastSend; } loopAndSendArray();

Esto es óptimo sin importar si el cálculo toma más o menos tiempo que la solicitud de red, si las solicitudes deben realizarse en serie (como lo está haciendo su código actual). Si las solicitudes se pueden realizar en paralelo y el cálculo lleva menos tiempo que la solicitud de red, podría calcular y enviar varias (o todas) a la vez.

about 4 years ago · Juan Pablo Isaza Relatório

0

No hay una buena manera de implementar esto, ya que async / await es inherentemente secuencial y desea hacer las cosas en un orden diferente, pero este código debería hacerlo:

 async function loopAndSendArray() { let prevPromise; for (let val of arrayToSend) { let calculatedVal = calculate(val) await prevPromise; prevPromise = send(calculatedVal); // prevent unhandled rejections crashing the app in case `calculate` throws prevPromise.catch(e => {/* ignore */}); } await prevPromise; }
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