javascript - 如何在 RxJs 中满足条件后立即取消订阅
问题描述
我是 RxJs 可观察对象的新手,一旦满足条件,我发现很难取消订阅循环,请你帮我
在下面的函数中,如果代码到达 if 块我想取消订阅 Observables
在问这个问题之前,我已经经历了以下问题,但没有一个对我有太大帮助
Javascript 函数
this.router.events.subscribe((url: any) => {
url = this.router.url;
if ((url === "/profile" || url === "/summary") && this.filterConfigFlag === false) {
/*
Perform operations
*/
} else {
console.log(typeof (url), url);
}
});
解决方案
你可能想要takeWhile
:
this.router.events
.pipe(
takeWhile(url => url === ...), // when the condition isn't met it'll complete immediately
)
.subscribe(...);
但如果您还想包含最后一个值(完成 Observable 的值),您需要执行以下操作:
在 RxJS 6.4 之前
this.router.events
.pipe(
concatMap(url => url === ... ? of(url, null) : of(url)),
takeWhile(Boolean),
)
.subscribe(...);
从 RxJS 6.4 开始
RxJS 6.4 添加了一个重载takeWhile
,现在可以像这样包含最后一个值:
this.router.events
.pipe(
takeWhile(url => url === ..., true),
)
.subscribe(...);
推荐阅读
- ada - 添加派生类型是接口的重大更改吗?
- java - 对象转换的功能/目的是什么?
- paypal-adaptive-payments - Paypal Adaptive Payments 查找应用程序 ID
- html - CSS过滤器:反转不适用于背景色
- java - junit 中的 ArrayList 相等性不起作用,尽管预期和实际相似
- image - 当 stride>1 时使用 FFT-Convolution
- amazon-web-services - 为每个应用程序用户动态创建 IAM 角色
- sql - 需要对一列进行分组添加获取 Hive 中其他列的计数
- swift - 属性别名(可以说是 Identifiable 最优雅的解决方案)
- c - 将正确的参数传递给 strtok