【问题标题】:Mapping Observable array of one type to an Observable array of a different type将一种类型的 Observable 数组映射到另一种类型的 Observable 数组
【发布时间】:2017-11-07 23:43:34
【问题描述】:

我正在开发一个从 REST 服务获取数据的数据服务。有没有办法接收一种对象数组的 Observable 但返回不同类型数组的 Observable?我认为这就是 mergeMap 所做的,但我无法理解如何完成此操作。

类似这样的:

@Injectable()
export class MyDataService {
  constructor(private http: HttpClient) { }

  getThings(): Observable<B[]> {
    return this.http.get<A[]>(url)
    mergeMap(x => [x + <B>{foo: x.bar});
  }
}

在 C# 中,我只会使用 LINQ 表达式来选择一个新对象。我怎样才能在 Angular 中做同样的事情?也许服务可以简单地返回类型 A 的 Observable 数组,订阅服务的消费者可以以某种方式处理映射?那会是更好的方法吗?

【问题讨论】:

    标签: arrays angular rxjs observable


    【解决方案1】:

    这取决于您要映射的内容/位置。例如,您可以键入提示 .map 运算符:

    .map<A, B>(v => /* transform A to B */)
    

    你可以对mergeMap做同样的事情:

    .mergeMap<A, B>(v => /* transform A to Observable<B> */)
    

    【讨论】:

    • 我发现我必须做两次映射才能得到我想要的。第一个映射调用“x”是 A[]。但是我需要将每个 A 更改为 B,所以我映射 x 并使用第二个映射中的 y 变量返回一个新 B。有没有更好的办法? .map(x =&gt; x.map(y =&gt; &lt;B&gt;{ foo: bar }))
    • 我认为您也可以返回.map(x =&gt; x.map(y =&gt; { foo: bar })) as B[],这可能更具可读性
    猜你喜欢
    • 1970-01-01
    • 2021-04-11
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 2021-04-18
    相关资源
    最近更新 更多