我有2个请求。
getCurrentBook(): Observable<Book>
getDetailedInfo(bookId): Observable <BookDetailed>
它们都返回带有信息的可观察对象,但是要使用第二个请求,我必须确保我从第一个请求收到了信息,因为bookId
在响应中。
我知道我可以在其他订阅中进行订阅,但是这种解决方案对我似乎并不有吸引力。必须有一种更加优雅的方式。
现有解决方案
getCurrentBook().subscribe(res => {
getDetailedInfo(res.id).subscribe(...);
})
我知道它应该类似于:
booksSubs = getCurrentBook().pipe(
map(res =>
{this.currentBook = res}
)
)
detailedSubs = getDetailedInfo(this.currentBook.id).pipe(
map(res =>
{this.detailed = res}
)
)
this.subscriptions.push(SOME OPERATOR(booksSubs, detailedSubs).subscribe();
但是更高的选项将不起作用,因为我需要先观察到的结果才能初始化第二个。
答案 0 :(得分:1)
您可以使用一些“扁平化”运算符来实现它,例如mergeMap
:
const currentBookDetails$ = getCurrentBook().pipe(
mergeMap(book => getDetailedInfo(book.id))
);