Angular RxJs:计算组件中的可观测数组长度

Angular RxJs:计算组件中的可观测数组长度,angular,rxjs,Angular,Rxjs,我有一个可观察的数组,购买$。在角度2分量中,我想计算数组的长度。我担心可观察的东西永远都不完整,因此我的订阅量最终会堆积如山。如果我执行以下操作,订阅将完成吗 this.purchases$.subscribe((val) => { val.length > 0 ? this.purchaseType = 'initial' : this.purchaseType = 'additional' }) 一旦我有了初始值,我很乐意取消订阅 我可以简单地将.unsubscribe(

我有一个可观察的数组,
购买$
。在角度2分量中,我想计算数组的长度。我担心可观察的东西永远都不完整,因此我的订阅量最终会堆积如山。如果我执行以下操作,订阅将完成吗

this.purchases$.subscribe((val) => {
  val.length > 0 ? this.purchaseType = 'initial' : this.purchaseType = 'additional'
})
一旦我有了初始值,我很乐意取消订阅


我可以简单地将
.unsubscribe()
添加到末尾吗?

与其强制取消订阅,我建议您使用创建一个可观察的,在发出第一个结果后自动完成:

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

与其强制取消订阅,我建议您使用创建一个可观察的,在发出第一个结果后自动完成:

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

订阅中的内容不会影响可观察到的源,因此如果要取消订阅,需要使用完成链的操作员或手动取消订阅

例如,如果您知道要接受多少项,您可以使用
take(N)
,或者如果它取决于特定条件,您可以使用
takeWhile()
。或者您可以使用
scan()
收集项目,并将其与
takeWhile()
结合使用

您也可以在订阅呼叫中立即取消订阅:

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

请注意,在这种情况下,您不能使用箭头函数
()=>…
,因为RxJS将
上下文绑定到当前
订阅
对象。这就是为什么您可以调用
this.unsubscribe()
和unsubscribe(这不是黑客攻击,它的目的是这样使用)。

您订阅中的内容不会影响可观察到的源代码,因此如果您想要取消订阅,您需要使用一个操作符来完成链或手动取消订阅

例如,如果您知道要接受多少项,您可以使用
take(N)
,或者如果它取决于特定条件,您可以使用
takeWhile()
。或者您可以使用
scan()
收集项目,并将其与
takeWhile()
结合使用

您也可以在订阅呼叫中立即取消订阅:

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

请注意,在这种情况下,您不能使用箭头函数
()=>…
,因为RxJS将
上下文绑定到当前
订阅
对象。这就是为什么您可以调用
this.unsubscribe()
和unsubscribe(这不是黑客攻击,它的目的是以这种方式使用)。

您还可以使用
takeWhile
操作符,将其与
onDestroy
上变为false的变量一起使用,因此,一旦组件被删除,您的订阅将被删除。您也可以使用
take
操作符,将其与
ondestory
上的一个变元一起使用,这样一旦组件被删除,您的订阅将被删除。我将在哪里包括
take(N)
在我的订阅中?
此。购买$.pipe(take(N))。订阅(…)
似乎angular不认识
pipe
。。。嗯,在我的订阅中,我应该在哪里包括
take(N)
呢?
this.purchases$.pipe(take(N))。订阅(…)
似乎angular不认识
pipe
。。。六羟甲基三聚氰胺六甲醚