angular - 订阅中的订阅更好地使用 switchMap 以 angular2+ 编写
问题描述
有人可以帮我更好地编写这段代码。我似乎无法理解 switchMap、mergeMap 以及如何在订阅中摆脱订阅。
this.service
.service1('something')
.pipe(takeUntil(this.unsubscribe))
.subscribe(
(s1result) => {
if (s1result.IsOK) {
this.service
.service2()
.pipe(take(1))
.subscribe((s2result) => {
'IS OK MESSAGE';
});
} else {
'NOT OK MESSAGE';
}
},
() => {}
);
解决方案
你可以这样使用switchMap
:
this.service
.service1('something')
.pipe(
takeUntil(this.unsubscribe),
switchMap((s1result)=> {
if (s1result.IsOK) {
return this.service
.service2()
.pipe(take(1));
} else {
return of(EMPTY);
}
})
)
.subscribe(
(s2result) => {
s2result ? 'IS OK MESSAGE' : 'NOT OK MESSAGE';
});
推荐阅读
- php - 需要一个特定的包提交 - composer 似乎忽略了 composer.json 的要求
- python - 在后台启动的 tshark 任务不会生成任何文件
- c++ - 当我尝试加载 PNG 纹理 (Direct3D 11) 时出现“找不到组件”错误
- javascript - 将js脚本添加到django项目的问题
- html - 使用 R 跨多个链接进行网络抓取
- ios - 防止 SwiftUI 子视图重绘
- swift - Editbutton 在 SwiftUI 中以一种有趣的方式从 List 中删除项目(带有绑定)
- javascript - 如何从客户端访问服务器目录中的文件?
- java - 重定向到 Thymeleaf 中的登录页面后显示警报信息
- python - 在 Python 中,如何增加命令?