Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

447
Views
Angular se suscribe para esperar la respuesta

Estoy tratando de suscribirme a un Observable y asignar algunos datos de la respuesta, pero de alguna manera mi código no está esperando la respuesta. Básicamente, el archivo console.log (this.newIds) se ejecuta primero y siempre está vacío porque la suscripción no espera que la respuesta provenga del backend. ¿Cómo puedo obligar a mi código a esperar a que llegue la respuesta?

 this.repository.getById(Ids).subscribe((response) => { console.log(response); this.newIds = response.map((id) => { return id; }); }); console.log(this.newIds);
about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Puedes hacer así..

su archivo de componente como a continuación

 newIds: Observable<any> = of(this.id).pipe( concatMap((id) => this.getId(id).pipe(map((data) => data.map((rowId) => rowId.id))) ) ); getId(id: any) { return of([{ id: 1 }, { id: 2 }, { id: 3 }]); }

su archivo html como se muestra a continuación, y use la canalización asíncrona para la suscripción. aquí puede usar el operador concateMap pipe rxjs para llamar secuencialmente observable y luego asignar valor a su variable newId.

 <pre> {{ newIds | async }} </pre>

Demostración en este enlace en vivo Stackblitz Link

about 4 years ago · Juan Pablo Isaza Report

0

Si pones el código en la devolución de llamada de suscripción. Se ejecutará después de recibir una respuesta del back-end. Todo el código que escriba fuera de esta función se ejecuta directamente.

 this.repository.getById(Ids).subscribe((response) => { //Code will execute when back-end will respond console.log(response); this.newIds = response.map((id) => { return id; }); console.log(this.newIds); }); //Code will execute immediately

Ver también: https://angular.io/guide/observables#creating-observables

about 4 years ago · Juan Pablo Isaza Report

0

Este es el comportamiento normal porque su console.log(this.newIds); está fuera de la suscripción, solo necesita moverlo dentro del método .subscribe():

 this.repository.getById(Ids).subscribe((response) => { console.log(response); this.newIds = response.map((id) => { return id; }); console.log(this.newIds); });

si desea usar this.newIds fuera de la suscripción e inmediatamente después del resultado del observador, puede usar RxJs .toPromise() para usarlo como una promesa y cambiar el método a asíncrono:

 async callerFn(){ const response = await this.repository.getById(Ids).toPromise(); this.newIds = response.map((id) => { return id; }); console.log(this.newIds); // use your property here }
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!