【问题标题】:Angular 5 nested http client observables return objectAngular 5 嵌套的 http 客户端 observables 返回对象
【发布时间】:2018-08-12 13:49:53
【问题描述】:

我正在尝试创建一个可观察的响应,其中我进行了一次 http 调用,然后在返回响应之前,我再次进行了 http 调用以填充第一次调用的返回对象,如下所示。

getOrderWithItems(orderId: string, includes: Set<OrderInclude>): Observable<OrderDto> {
    return this.getOrder(orderId, includes)
      .map(order => {
        this.searchItems().subscribe(
          items => {
            order.items = items.results;
            return order;
          }
        )
      });
  }

编译器给出错误:类型“Observable”不可分配给类型“Observable”。不知道如何让它工作。 this.getOrder() 和 this.searchItems() 都映射了返回相应 observables 的 http 调用。

【问题讨论】:

    标签: angular rxjs angular2-observables angular-httpclient


    【解决方案1】:

    您的 地图 不会返回任何内容。它只订阅另一个 Observable。

    要将一个 Observable 转换为另一个(getOrdersearchItems),请使用其中一个平面运算符。在您的情况下,switchMap 适合:

    this.getOrder(orderId, includes)
      .switchMap(order => 
        this.searchItems()
          .map(items => ({...order, items: items.results}))
      );
    

    【讨论】:

    • 我总是会推荐 switchMap。不是合并地图。这是一个非常不寻常的场景,当源 Observable 下次发出时,后续请求不应取消。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    相关资源
    最近更新 更多