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

793
Visualizações
Angular 12 Cómo llamar a la API de descanso múltiple usando el método de suscripción

Necesitamos llamar a varias API REST desde ngOnInit() una por una. Después de llamar a la primera, necesitamos pasar esta respuesta en la segunda llamada a la API y lo mismo para la tercera, necesitamos obtener el valor de la segunda llamada a la API y pasarla a la tercera.

Pero mientras llamamos como a continuación, siempre obtenemos un valor indefinido.

 this.globalVar1 : any; this.globalVar2 : any; this.globalVar3 : any; async ngOnInit() { this.apiService.getFirstAPICall(request).subscribe(info => { this.globalVar1 = info; //here value is coming from API service call } console.log(this.globalVar1); //here undefined //Now calling the second API ** here we need this first variable //but due to undefined we are getting error this.apiService.getSecondAPICall(request.globalVar1).subscribe(info => { this.globalVar2 = info; } console.log(this.globalVar2); //here undefined
over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Está ejecutando código asincrónico, lo que significa que sus solicitudes se pueden ejecutar en paralelo, luego sucede que realiza la segunda solicitud antes de que los resultados de la primera estén aquí.

Hay varias formas de hacer que su código se ejecute secuencialmente, una sería usar la palabra clave await . Esto espera a que termine el código en la línea actual antes de ejecutar la siguiente línea.

Su código entonces se vería así:

 this.globalVar1 : any; this.globalVar2 : any; this.globalVar3 : any; async ngOnInit() { this.globalVar1 = await this.apiService.getFirstAPICall(request); console.log(this.globalVar1); this.globalVar2 = await this.apiService.getSecondAPICall(this.globalVar1); console.log(this.globalVar2); }

Otra forma de solucionar el problema sería hacer la segunda petición en la suscripción de la primera.

over 4 years ago · Santiago Trujillo Relatório

0

Subscribe es asíncrono, lo que significa que no esperará hasta que se ejecute para activar la siguiente línea de su código. En su lugar, debe convertir su .subscribe() en una promesa. Usualmente usando .toPromise() .

Luego, puede await las promesas y asignar el valor a un parámetro que podría pasar a la próxima ejecución.

ejemplo

 async ngOnInit() { const res1 = await this.apiService.getData(); // getData() should already be a promise returning a value of type Promise<YourType> const res2 = await this.apiService.getData2(res1); // etc... }
over 4 years ago · Santiago Trujillo Relatório

0

Puede usar el operador rxjs switchMap , luego puede pasar los datos de la primera llamada al observable interno (segunda llamada). entonces no necesita ninguna variable global y no se convierte en una promesa ya que httpClient devuelve un Observable

 import { switchMap } from 'rxjs/operators'; ... this.apiService.getFirstAPICall(request).pipe( map(response1 => // edit your data here) switchMap((editedResponse1) => this.getSecondAPICall(editedResponse1) ) ).subscribe()
over 4 years ago · Santiago Trujillo 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