RxJS forkJoin 未完成

Vug*_*yev 5 rxjs rxjs5 angular

当我订阅 getAllSubModules forkJoin 时,会无错误地执行所有这些 observable 但没有完成。我知道 forkJoin 仅在其所有 observables 完成后才完成,但作为证据,我在控制台中看到 '-----' 3 次,确认一切都成功,因此其所有 observables 已完成。

 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;
    }
  }
Run Code Online (Sandbox Code Playgroud)

使用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));
Run Code Online (Sandbox Code Playgroud)

但是当我使用combineLatest而不是 forkJoin 时,它会按预期工作。那么是什么问题呢?希望有人指教。

Mar*_*ten 6

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

尝试一下,如果您使用和/或来查看各个流.do(next=>{},err=>{},complete => console.log('completed'))或明确定义流应何时完成,会发生什么情况。.take(1).timeout(1000)

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