gpt4 book ai didi

angular - RxJS forkJoin 未完成

转载 作者:太空狗 更新时间:2023-10-29 18:19:27 25 4
gpt4 key购买 nike

当我订阅 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));

但是当我使用 combineLatest 而不是 forkJoin 时,它会按预期工作。 那到底是什么问题呢?望大神指点。

最佳答案

您的期望不正确。 console.log('--------------------') 发出 3 次仅意味着您已收到 3 个 onNext 事件。 forkJoin 等待所有可观察对象完成。

尝试使用 .do(next=>{},err=>{},complete => console.log('completed')) 或显式查看各个流会发生什么使用 .take(1) 和/或 .timeout(1000) 定义流何时完成。

发出一个值后 authService..getToken() 是否完成?

关于angular - RxJS forkJoin 未完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47450639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com