网站搜索

typescript - rxjs forkJoin Observable 不能分配给类型为 OperatorFunction 的参数


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

// 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

错误发生是因为你没有从 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)来返回一个可观察对象,而不是使用 map。