completeMedicalDataSubmission(forReview: boolean, success: MedicalData, newStatus: Status | undefined ) { let msg = this.translate.instant("GENERAL.DATA_SAVED"); this.snackBar.open(msg, '\u2716', {duration: 8000, panelClass: ['goodPanel']}); if (forReview) { this.patientDataReviewService.requestPatientDataReviewByPatient(success.medicalDataId!).subscribe(success => { if (this.onComplete !== null) { this.router.navigate([this.onComplete]); } }) } if (newStatus) { this.patientDataReviewService.updatePatientDataReviewByResearcher(this.id!, this.demographicMedicalData!.medicalDataId!, this.demographicMedicalData!.version!, newStatus).subscribe() } if (!forReview && this.onComplete !== null) this.router.navigate([this.onComplete]); }Específicamente, ¿hay alguna manera de hacer que el router.navigate solo suceda cuando se hayan completado todas las llamadas a la API (si es necesario)?
Puede usar forkJoin de la biblioteca RxJs. Puedes ver el documento aquí
en tu caso puedes hacer:
import { forkJoin } from 'rxjs'; const observable = forkJoin({ first: this.patientDataReviewService.requestPatientDataReviewByPatient(success.medicalDataId!), second: this.patientDataReviewService.updatePatientDataReviewByResearcher(this.id!, this.demographicMedicalData!.medicalDataId!, this.demographicMedicalData!.version!, newStatus) });y luego suscríbete
observable.subscribe(({first, second}) => { // do some thing with first and second value. this.router.navigate([this.onComplete]); })