无法将rxjs forkJoin Observable <never>分配给OperatorFunction <nerver>

时间:2019-07-04 22:24:08

标签: typescript rxjs

我正在对数组中的每个元素进行数据库调用,并将每个可观察对象存储在数组中,然后完成并将结果传递给进一步的步骤。 这是我到目前为止的内容:

// some prior logic, it returns a list of users
   .map (users = > {
      const observables = [];
      for (let u of users) {
        //ts error: Argument of type Observable<any> is not assignable to parameter of type never
        observables.push(this.findCityAndAugmentUser(u.cityId, u))
      }
      return observables;
   }), 
   // Argument of type Observable<any> is not assignable to parameter of type OperatorFunction<never[], {}>
   forkJoin((augmentedUsers) => {
    //wait for array of augmentedUsers and do more stuff here
    console.log(augmentedUsers);
  }),

   //in short, augment the user with the model of the city
   private findCityAndAugmentUser(cityId: string, user): Observable<any> {
    return this.service.findById(cityId).pipe(
      map(city => user['city'] = city)
    )
  }

因此,目标是将所有可观察变量推入一个数组,等待所有可观察变量完成,然后继续处理结果。但是我不知道为什么我在注释中出现的那些签名错误会弹出,以及如何解决。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

发生错误是因为您没有从forkJoin返回任何信息。您的输出可观察到的期望值不会从操作员管道中返回。

尝试通过如下代码更改代码:

.switchMap (users = > {
      const observables = [];
      for (let u of users) {
        //ts error: Argument of type Observable<any> is not assignable to parameter of type never
        observables.push(this.findCityAndAugmentUser(u.cityId, u))
      }
      return forkJoin(observables);
   }), 

您应该使用switchMap(或根据需要合并mergeMap)来返回一个可观察的图像。