Angular 5 вложенный http-клиент наблюдаемый объект возврата

Я пытаюсь создать наблюдаемый ответ, в котором я делаю один 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;
          }
        )
      });
  }

Компилятор выдает ошибку: тип "Наблюдаемый" не может быть назначен типу "Наблюдаемый". Не уверен, как заставить это работать. this.getOrder() и this.searchItems() отображают http-вызовы, которые возвращают соответствующие наблюдаемые.

1 ответ

Ваша карта ничего не возвращает. Это только подписывается на другую Наблюдаемую.

Для преобразования одного Observable в другое (getOrder to searchItems) используйте один из плоских операторов. В вашем случае switchMap подойдет:

this.getOrder(orderId, includes)
  .switchMap(order => 
    this.searchItems()
      .map(items => ({...order, items: items.results}))
  );
Другие вопросы по тегам