我正在对数组中的每个元素进行数据库调用,并将每个可观察对象存储在数组中,然后完成并将结果传递给进一步的步骤。 这是我到目前为止的内容:
// 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)
)
}
因此,目标是将所有可观察变量推入一个数组,等待所有可观察变量完成,然后继续处理结果。但是我不知道为什么我在注释中出现的那些签名错误会弹出,以及如何解决。有什么建议吗?
答案 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)来返回一个可观察的图像。