Я работаю над веб-приложением Angular 6+, используя rxjs 6+.
Есть набор сервисов (все разные и делают разные http звонки).
В основном эти сервисы используются для инициализации приложения.
Мое требование - вызывать эти службы параллельно и ждать, пока все они не будут завершены. После завершения мне нужно обработать полученные ответы.
Я много изучал в этой области и обнаружил, что forkJoin и Объединить последние могут быть моими друзьями.
И я реализовал то же самое следующим образом:
getInitialData() {
this._authService.openCorsConnection().subscribe(res => {
forkJoin(
this._authService.x(),
this._tService.getSystemDate(),
this._tService.getTemp(),
this._tService.getSettings()
).pipe(
catchError( err => {
console.log('gor error',err);
if (err.status == 401) {
// this._router.navigateByUrl('/unauthorize');
return EMPTY;
} else {
return throwError(err);
}
}),
map(([x,y,z,p])=>{
console.log('sucesss',{x,y,z,p});
return {x,y,z,p}
}),
finalize(()=>{
console.log('Executing Finally');
processData();
})
);
});
}
Но это не исполнение. Вот услуги:
x(): Observable<any> {
const xUrl = EnvironmentConfiguration.endPointConfig.xServiceEndpoint;
let serviceMethod: String = 'x';
let requestObj: any = this._utilHelperSvc.getRequestObject(xUrl , { "y": "" }, serviceMethod);
return this._http.post<any>(requestObj.url,{ "pid": "" } , requestObj)
.pipe(
catchError(this.handleError('x', {}))
);
}
Нужно ли менять сервисы?
Я не могу понять, как решить эту проблему.
Кто-нибудь может предложить, пожалуйста, лучшее решение или другой подход для этого?
Спасибо.