代码之家  ›  专栏  ›  技术社区  ›  Jeremy Thomas

RXJS:计算组件中的可观测阵列长度

  •  0
  • Jeremy Thomas  · 技术社区  · 7 年前

    我有一个可观测的阵列, purchases$ . 在角2分量中,我想计算数组的长度。我担心观察到的内容永远都不完整,所以我的订阅最终会堆积起来。如果我执行以下操作,订阅是否完成?

    this.purchases$.subscribe((val) => {
      val.length > 0 ? this.purchaseType = 'initial' : this.purchaseType = 'additional'
    })
    

    一旦我有了初始值,我就很乐意取消订阅。

    我能简单地加一下吗 .unsubscribe() 到最后?

    2 回复  |  直到 7 年前
        1
  •  1
  •   martin    7 年前

    订阅中包含的内容不会影响可观察到的源,因此,如果要取消订阅,则需要使用完成链或手动取消订阅的运算符。

    例如,如果您知道要接受多少项,则可以使用 take(N) 或者如果它取决于某种条件,你可以使用 takeWhile() . 或者你可以用 scan() 把它和 () 例如。

    您还可以在订阅呼叫中取消订阅:

    this.purchases$.subscribe(function(val) {
      if (condition) {
        this.unsubscribe();
      }
    });
    

    注意,在这种情况下,不能使用箭头函数 () => ... 因为RXJS绑定 this 当前上下文 Subscription 对象。所以你可以打电话 this.unsubscribe() 取消订阅(这不是一个黑客,它的目的是这样使用)。

        2
  •  0
  •   Nicholas Tower    7 年前

    我建议您使用 first operator 要使第一个结果发出后自动完成的可观测数据:

    this.purchases$.pipe(first()).subscribe((val) => {
      val.length > 0 ? this.purchaseType = 'initial' : this.purchaseType = 'additiona';
    })
    
    推荐文章