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}))
);