【问题标题】:Unsubscribe later with takeUntil if a condition is met如果满足条件,稍后使用 takeUntil 取消订阅
【发布时间】:2021-09-03 07:13:09
【问题描述】:

在数字不等于 5 的任何情况下,我都想使用 takeUntil 取消订阅 observable。 如果数字是 5 想做点什么,然后退订,但它不起作用。

这是我的 stackblitz 链接:https://stackblitz.com/edit/angular-ivy-lpkzyf?file=src%2Fapp%2Fapp.component.ts

谢谢。

【问题讨论】:

    标签: 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>

    【讨论】:

      猜你喜欢
      • 2018-12-14
      • 2017-04-10
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 2018-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多