Estoy tratando de acceder a una variable dentro de una función de suscripción pero me regresa indefinido, por favor alguna sugerencia:
export class InboxmanagementComponent implements OnInit { releveBancaireId: number; ngOnInit(): void { this.displayTaskByIdDetails(); this.displayReleveBancaireById(); } displayTaskByIdDetails(){ this._inboxServcie.getTask(this.task.id).subscribe( (data) => { this.task = data; this.releveBancaireId = data.releveBancaireId; // this is the variable I want to access console.log(this.releveBancaireId) // this returs 1 which is right "releveBancaireId" has value 1 } ); } displayReleveBancaireById(){ this._relebeBancaireService.getReleveBancaireById(this.releveBancaireId).subscribe( // this is where I want to access that variable as a parameter (data) => { this.releveBancaire = data; console.log(data); } ); } }this.task dentro de la función displayTaskByIdDetails devuelve esto:
Lo que significa que tengo que usar esa propiedad releveBancaireId que se devuelve desde displayTaskByIdDetails y usarla en otra función que llama a un servicio como parámetro
Este es mi servicio que necesita releveBancaireId como parámetro:
getReleveBancaireById(id: number): Observable<ReleveBancaire>{ const taskIdUrl = `${this.baseUrl}/${id}`; return this.httpClient.get<any>(taskIdUrl).pipe( map((response: any) => response) ); } Al compilar la consola devuelve undefined
Ok, dado que las llamadas son secuenciales, es una oportunidad perfecta para usar mergeMap para encadenar múltiples solicitudes. dado que aún necesita los datos de la primera solicitud, puede tocar esos datos y recuperarlos. y en la suscripción final obtendrá los datos de la solicitud final.
export class InboxmanagementComponent implements OnInit { releveBancaireId: string; ngOnInit(): void { this.displayTaskByIdDetails(); } displayTaskByIdDetails(){ this._inboxServcie.getTask(this.task.id).pipe( tap(taskData=>{ this.task = taskData this.releveBancaireId = taskData.releveBancaireId; // incase you still need this. }), mergeMap(data=>{ return this._relebeBancaireService.getReleveBancaireById(data.releveBancaireId); })).subscribe((data) => { this.releveBancaire = data; console.log(data); }); } }