rxjs - 用其他 observable 的结果初始化 observable
问题描述
我有 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();
但是更高的选项不起作用,因为我需要第一个可观察的结果来初始化第二个。
解决方案
您可以使用一些“扁平化”运算符来实现它,例如mergeMap
:
const currentBookDetails$ = getCurrentBook().pipe(
mergeMap(book => getDetailedInfo(book.id))
);
推荐阅读
- javascript - 将 Vue 组件包装到另一个 Vue 组件中
- javascript - React + Server 身份验证不存储会话
- python - 用于表选择的 Django force_str 返回原始值
- php - 将项目从 Laravel 5.8 更新到 6 或 7
- python - 迁移在 django 中意味着什么?
- xml - 带有图像背景的按钮的 Android 布局 XML
- firefox - userAgent 切换器扩展中的 Object.defineProperty
- python - Python - Matplotlib - 轴标签
- javascript - 加载时的jquery窗口未执行
- javascript - Vuex获取循环ID到axios