【问题标题】:Angular HttpClient map observable array of objectsAngular HttpClient 映射可观察的对象数组
【发布时间】: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) =&gt; res.json()),如果提供的json结构与Entry的类属性匹配,你将得到Entry[]的Observable的返回值,并且你必须将它们作为数组从服务器端。
  • 你不完全是 "双重映射";一个是 Observable.map,另一个是 Array.map。你所拥有的真的有问题吗?
  • @Niladri 我认为res.json 在使用 Angular 4.3.0+ 时会自动调用。所以是的,我可以写 return this.httpClient.get&lt;Entry[]&gt;(url); TS 编译器会接受它,但实际上它会返回 Observable&lt;Object[]&gt; 并且不会调用 Entry 构造函数
  • @jonrsharpe 它可以工作,但我是 observables 的新手,想知道是否有更简单的方法
  • 使用此代码时出现此错误“任何”仅指一种类型,但在此处用作值

标签: angular typescript rxjs observable


【解决方案1】:

这是最好的方法,如果 Entry 有任何其他成员而不是从 api 获得的成员,或者如果某些成员需要进行类型转换(例如,Entry 对构造函数中的数据)。如果不是,则不需要映射。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 2020-01-12
    • 2018-12-29
    相关资源
    最近更新 更多