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

197
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 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