用其他可观察结果初始化可观察

时间:2019-08-12 10:24:33

标签: rxjs observable

我有2个请求。

  1. getCurrentBook(): Observable<Book>
  2. 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();

但是更高的选项将不起作用,因为我需要先观察到的结果才能初始化第二个。

1 个答案:

答案 0 :(得分:1)

您可以使用一些“扁平化”运算符来实现它,例如mergeMap

const currentBookDetails$ = getCurrentBook().pipe(
  mergeMap(book => getDetailedInfo(book.id))
);