当我订阅 getAllSubModules 时,forkJoin 会毫无错误地执行所有这些可观察值,但不会完成。我知道 forkJoin 仅在其所有可观察值完成后才完成,但作为证据,我在控制台中看到“-----”3 次,这确认一切都成功,因此所有可观察值均已完成。
getSubmodules(id): Observable<any> {
return this.authService.getToken()
.flatMap((token) => this.http.get(`${this.URL}/ROS/applications/modules/${id}/subModules?token=${token}`))
.map((res: any) => res.data.map((subModule) => this.mapSubModules(subModule)));
}
getAllSubmodules(): Observable<any> {
const tasks = [];
this.modules.forEach((module: AppModule) => {
const obs = this.getSubmodules(module.id).map((subModules) => {
this.allSubModules[module.id] = subModules;
console.log('--------------------');
});
tasks.push(obs);
});
return Observable.forkJoin(...tasks).retry(2);
}
mapSubModules(moduleData) {
if (moduleData.id) {
const subModule = <SubModule> {
id: moduleData.id,
parentId: moduleData.parentId,
typeId: moduleData.typeId,
name: moduleData.name.az,
active: true
};
return subModule;
}
}
使用时不会执行此代码forkJoin:
this.universityService.getAllSubmodules().subscribe(() => {
// --- Below is not executed!--
console.log('subModules in Report Co');
console.log(this.universityService.allSubModules);
this.checkUrl();
this.showChild = true;
}, (er) => console.log(er));
但是当我使用结合最新而不是 forkJoin 它按预期工作。
那么问题出在哪里呢?希望有人指教。
你的期望是不正确的。拥有console.log('--------------------')
发出 3 次仅意味着您已收到 3onNext
事件。forkJoin
等待所有 observable 完成。
尝试一下如果您使用以下命令查看各个流会发生什么.do(next=>{},err=>{},complete => console.log('completed'))
或明确定义您的流何时应完成使用.take(1)
and/or .timeout(1000)
.
Does authService..getToken()
发出一个值后完成?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)