我想在做某事之前等待所有的http请求完成。
在Angular 5之前,我使用的是promises和Promise.All
。
使用Angular 5和新的HttpClient
,我将我的承诺转化为可观察者。如果我理解正确,我现在必须使用forkJoin
来替换Promise.All
。
但这是一个问题,因为forkJoin
期望Observables作为参数,但我已经订阅了代码中的那些
ngOnInit() {
forkJoin([this.getTemplates(), this.getHistory()]).subscribe(
results => {
this.isLoading = false;
}
);
}
getTemplates(): Observable<any> {
return this.notifService.getTemplateList()
.subscribe(
response => {
if (response.code === 0) {
this.templateList = response.data;
}
else {
this.openSnackBar(response.formatError());
}
},
error => {
this.openSnackBar(error);
});
}
我无法在forkJoin
订阅中执行逻辑,因为这些方法(getTemplates()
&amp; getHistory()
)需要是独立的,并在其他进程中单独调用。
那么,我该怎样做才能确保所有订阅都已完成?
顺便说一下,上面的代码没有编译,因为方法getTemplates()
返回Subscription
而不是Observable
答案 0 :(得分:2)
使用map
代替subscribe
中的getTemplates
:
getTemplates(): Observable<any> {
return this.notifService.getTemplateList()
.map(response => {
/* ... */
return reponse;
});
}