我想在做某事之前等待所有 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
Use map
代替subscribe
in getTemplates
:
getTemplates(): Observable<any> {
return this.notifService.getTemplateList()
.map(response => {
/* ... */
return reponse;
});
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)