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

196
Vistas
asíncrono y espera en respuesta angular api

Estoy tratando de hacer la tarea paso a paso.

Tengo un bucle for en un método:

 async changeTimeStep3() { for (let i = 1; i < 10; i++) { await this.do(i) } }

para cada paso debe hacer () tarea.

 do(i) { this.http .getDataFromServer( "api/example?id=" +i ) .subscribe((response) => { console.log(i); }); }

Quiero esperar para obtener una respuesta y después de que llegue la respuesta, ir a la siguiente i

Pero no funciona la impresión de console.log:

 2 3 5 1 4 7 8 9 6

Tenga en cuenta que el tiempo para recibir la respuesta de la API no es fijo.

¿Alguna ayuda?

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Para que su bucle imprima los valores en el orden correcto, puede transformar sus observables en promesas, por lo que su await bloqueará el bucle for siempre que la llamada HTTP no se haya resuelto.

 import { firstValueFrom } from 'rxjs'; ... async do(i: number) { await firstValueFrom( this.http .getDataFromServer( "api/example?id=" +i ) ); console.log(i); }

El uso firstValueFrom o lastValueFrom son las formas RxJS de obtener una promesa como valor de retorno de un observable (dado que toPromise quedó en desuso, puede leer más sobre eso aquí ).

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede devolver una Promise y usar resolve() en respuesta a su ajax. Me gusta:

 do(i) { return new Promise((resolve, reject) => { this.http.getDataFromServer("api/example?id=" +i).subscribe((response) => { resolve(response); }, (error) => { console.error(error); reject(); }); }); }
about 4 years ago · Juan Pablo Isaza Denunciar

0

El problema aquí es que do no es un método asíncrono; es un método síncrono que activa uno asíncrono. Como tal, la espera se completa inmediatamente.

Es posible que puedas hacer esto:

 do(i) { return firstValueFrom(this.http .getDataFromServer( "api/example?id=" +i )) }

Convierte lo observable en una promesa y lo devuelve. Entonces, ahora el método do() devuelve un objeto asíncrono. Para generar desde el método do; puedes usar una pipa:

 return firstValueFrom(this.http .getDataFromServer( "api/example?id=" +i ).pipe(tap((result) => {console.log(i);}))

Dicho todo esto, usar async/await en Angular es inusual. Un operador RXJS generalmente se considera el enfoque correcto. Posiblemente con concat

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