【发布时间】:2018-07-25 11:49:37
【问题描述】:
在使用 Angular HttpClient 查询对象数组时,将结果的每个对象(Rxjs Observable)映射到另一个对象的最简单方法是什么?
我目前正在这样做,但有没有办法避免“双重映射”?
在示例中,最终结果需要为 Observable<Entry[]>,并为每个 Entry-object 调用构造函数:
public getList(): Observable<Entry[]> {
const url = "/entries/";
return this.httpClient.get<Entry[]>(url)
.map((entries: any[]) => entries.map((e) => new Entry(e)));
}
【问题讨论】:
-
如果你使用
.map((res:Response) => res.json()),如果提供的json结构与Entry的类属性匹配,你将得到Entry[]的Observable的返回值,并且你必须将它们作为数组从服务器端。 -
你不完全是 "双重映射";一个是 Observable.map,另一个是 Array.map。你所拥有的真的有问题吗?
-
@Niladri 我认为
res.json在使用 Angular 4.3.0+ 时会自动调用。所以是的,我可以写return this.httpClient.get<Entry[]>(url);TS 编译器会接受它,但实际上它会返回Observable<Object[]>并且不会调用Entry构造函数 -
@jonrsharpe 它可以工作,但我是 observables 的新手,想知道是否有更简单的方法
-
使用此代码时出现此错误“任何”仅指一种类型,但在此处用作值
标签: angular typescript rxjs observable