Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

167
Vistas
Texto mecanografiado: Convierta For loop en Promise y espere a que se resuelva todo

PROBLEMA: save.emit() se ejecuta antes de que se completen todas las iteraciones en el siguiente ciclo "for" que muestra valores incorrectos de la llamada addUpdate dentro del ciclo.

Estoy tratando de convertir un bucle for en una promesa y luego esperar a que se resuelva cada una de esas promesas para poder emitir cambios y cerrar una ventana emergente.

A continuación, hay un código de prueba en el que quiero imprimir " console.log("Print Before") " primero para cada iteración y luego, al final, imprimir " console.log("Print After") " una vez que se hayan realizado todas las iteraciones.

Cualquier ayuda sobre la sintaxis para esto es realmente apreciada.

 convertForLoopToPromiseAndWait(someParameterOfTypeObject) { for (var test of someParameterOfTypeObject) { var testVariable = test.setValue; if (testVariable) { dataService.addUpdateEndpointCall(); console.log("Print Before"); } } console.log("Print After"); save.emit(); } async addUpdateEndpointCall() { const promise1 = this.dataService.addCall().take(1).toPromise(); const promise2 = this.dataService.deleteCall().take(1).toPromise(); await Promise.all([promise1, promise2]) .then(_ => this.save.emit()); }
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Convierta convertForLoopToPromiseAndWait en un método asíncrono, luego puede usar await después de la palabra clave y antes dataService.addUpdateEndpointCall();

 async convertForLoopToPromiseAndWait(someParameterOfTypeObject) { for await (var test of someParameterOfTypeObject) { var testVariable = test.setValue; if (testVariable) { await dataService.addUpdateEndpointCall(); console.log("Print Before"); } } console.log("Print After"); await save.emit(); }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Creo que te has equivocado aquí:

 const promise1 = await this.dataService.addCall().take(1).toPromise(); const promise2 = await this.dataService.deleteCall().take(1).toPromise();

Esperas promesas. Los resultados puestos en las variables promise1 y promise2 no serán entonces promesas.

¿No te refieres a lo siguiente?

 async addUpdateEndpointCall() { const promise1 = this.dataService.addCall().take(1).toPromise(); const promise2 = this.dataService.deleteCall().take(1).toPromise(); await Promise.all([promise1, promise2]) .then(_ => this.save.emit()); }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Otra forma es hacer una lista de promesas y esperar a que se resuelvan:

 const promises = []; for await (your iterating condition) { promises.push(dataService.addUpdateEndpointCall()); }

entonces usa

 await Promise.all(promises).then( this.save.emit());
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda