首页 > 解决方案 > 如何在 RxJs 中满足条件后立即取消订阅

问题描述

我是 RxJs 可观察对象的新手,一旦满足条件,我发现很难取消订阅循环,请你帮我

在下面的函数中,如果代码到达 if 块我想取消订阅 Observables

在问这个问题之前,我已经经历了以下问题,但没有一个对我有太大帮助

  1. Rxjs 可观察等待,直到满足某些条件
  2. AngularJs - RXJS Observable 取消订阅

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);

    }
});

标签: javascriptangularrxjsobservable

解决方案


你可能想要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(...);

推荐阅读