我有一个观察的阵列, purchases$
。 在我的角2成分我想计算所述阵列的长度。 我担心的是,观察到的是永远不会完成,因此我的订阅结束堆砌。 如果我这样做会认购完成?
this.purchases$.subscribe((val) => {
val.length > 0 ? this.purchaseType = 'initial' : this.purchaseType = 'additional'
})
一旦我有一个初始值,我很高兴地退订。
我可以简单的添加.unsubscribe()
结束了吗?
你有你的订阅什么不影响源可观察到,所以如果要取消订阅您需要使用完成链或手动取消操作。
例如,如果你知道你想要多少个项目接受,您可以使用take(N)
或者如果它依赖于一定的条件就可以使用takeWhile()
或者你也可以收集与项目scan()
并结合它takeWhile()
的例子。
您也可以退订您订阅调用正确的:
this.purchases$.subscribe(function(val) {
if (condition) {
this.unsubscribe();
}
});
请注意,在这种情况下,您不能使用箭头函数() => ...
因为RxJS结合this
背景下,以目前的Subscription
对象。 这就是为什么你可以调用this.unsubscribe()
和退订(这不是黑客攻击,它打算使用这种方式)。
而不是命令式退订,我建议你使用的第一家运营商 ,以使可观察到的第一个结果是发射后自动完成:
this.purchases$.pipe(first()).subscribe((val) => {
val.length > 0 ? this.purchaseType = 'initial' : this.purchaseType = 'additiona';
})