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。
