angular - 在 RxJs 中动态选择是否返回一个 Observable 或另一个
问题描述
我正在为以下任务寻找最优雅的方式。我知道有多种方法可以做到这一点,并且有多种方法遵循更多的反模式(当然,我不想在这里:订阅中的订阅)。
我的设置
export class MyService {
giveMeTheBest(...): Observable<TheBest> {
const observable1$ = // Fancy request, returning an Observable
const observable2$ = // A request to a different endpoint, also returning and Observable
return // observable1$, if its content (!) matches a criteria.
// if observable1$ fails to match a criteria, it should pass on observable2$
}
}
我想做的事
我知道我必须以某种方式查看内容以observable1$
查看它是否符合某个标准。
- 如果确实如此:工作完成并返回
observable1$
- 如果不是:我想返回
observable2$
。
问题
- 我必须
observable1$
在服务中订阅吗?(对我来说这感觉不对,因为到目前为止我一直只订阅组件) - 或者是否可以仅使用 .pipe() 与 pipable 运算符结合使用来“在流程中”解决所有问题?
非常感谢!
解决方案
这基本上是 的工作switchMap
。默认情况下,您订阅流 1。如果内容与您尝试实现的内容不匹配,则取消订阅并改为订阅流 2。直到来自 stream1 的下一个发射
observable1$.pipe(switchMap(content => test(content) ? of (content) : observable2$)
推荐阅读
- python-3.x - Python:写入文件变音符号作为转义字符序列
- assembly - 汇编语言中的结构
- ios - 更新到最新版本的 Visual Studio 和 Xamarin 后无法启动应用程序
- sql - SQL:将 table1 和 table2 与合并的行链接,然后链接到 table3
- javascript - jQuery (JavaScript):了解从不同页面加载文档时的导航 ID
- javascript - 如何在更改事件javascript上调用触发器更改
- html - 内联样式确定标题高度,导致徽标上方和下方的填充
- magento2 - 自定义模块迁移的 Magento2 代码迁移工具问题
- java - Jmeter java.lang.NullPointerException
- python - 当需要其他变量时如何解包元组?