【发布时间】:2018-02-02 13:41:06
【问题描述】:
我想在做某事之前等待我的所有 http 请求完成。
在 Angular 5 之前,我使用的是 Promise 和 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() 和getHistory())需要独立并在其他进程中单独调用。
那么,我该怎么做才能确保所有订阅都完成了?
顺便说一句,上面的代码无法编译,因为方法 getTemplates() 返回的是 Subscription 而不是 Observable
【问题讨论】:
标签: javascript angular rxjs5