【问题标题】:Unsubscribe later with takeUntil if a condition is met如果满足条件,稍后使用 takeUntil 取消订阅
【发布时间】:2021-09-03 07:13:09
【问题描述】:
【问题讨论】:
标签:
angular
rxjs
observable
rxjs-observables
unsubscribe
【解决方案1】:
声明
在数字不等于 5 的任何情况下,我都想用 takeUntil 取消订阅 observable
不是很清楚。
如果您希望在发出的值不是 5 时取消订阅 observable,则需要使用 takeWhile 运算符,而不是 takeUntil。
试试下面的
const { of, Subject } = rxjs;
const { takeUntil, takeWhile } = rxjs.operators;
const unsubscribe$ = new Subject();
of(1, 2, 3, 4, 5, 6).pipe(
takeWhile(value => value === 5),
takeUntil(unsubscribe$)
).subscribe({
next: (num) => {
console.log(num);
console.log('something');
unsubscribe$.next();
},
complete: () => console.log('Stream complete')
});
<script src="https://unpkg.com/rxjs@6.6.7/bundles/rxjs.umd.min.js"></script>
但这会在发出 1 时立即关闭流。
我认为您正在寻找的是忽略 5 以外的值。在这种情况下,您需要使用 filter 运算符。
const { of, Subject } = rxjs;
const { filter, takeUntil } = rxjs.operators;
const unsubscribe$ = new Subject();
of(1, 2, 3, 4, 5, 6).pipe(
filter(value => value === 5),
takeUntil(unsubscribe$)
).subscribe({
next: (num) => {
console.log(num);
console.log('something');
unsubscribe$.next();
},
complete: () => console.log('Stream complete')
});
<script src="https://unpkg.com/rxjs@6.6.7/bundles/rxjs.umd.min.js"></script>