我有以下代码:
this.obs$ = this.service.obs$;
this.obsSubscription = this.obs$.subscribe(
(eltArray: Elt[]) => this.eltArray = eltArray
);
this.anotherObsSubscription = this.obs$.pipe(take(1)).subscribe(
(eltArray: Elt[]) => this.anotherEltArrayOnlyChangedOnce = eltArray
);
出于好奇,而且为了限制我的订阅数量(必须取消订阅),我想知道如何仅用一个Subscription
就可以达到相同的结果。
因此,我想在首次发射anotherEltArrayOnlyChangedOnce
时初始化this.service.obs$
,并在eltArray
的每次发射时设置this.service.obs$
。
答案 0 :(得分:2)
您可以执行以下操作-
anotherEltArrayOnlyChangedOnce = null;
this.obs$.subscribe((eltArray: Elt[]) => {
if(this.anotherEltArrayOnlyChangedOnce === null) {
this.anotherEltArrayOnlyChangedOnce = eltArray
}
this.eltArray = eltArray
}
)
答案 1 :(得分:2)
您可以使用扫描运算符添加一个计数器。
this.obs$.pipe(
scan((acc, value) => [acc[0]++, value], [0])
).subscribe(([count, eltArray]: [number, Elt[]]) => {
if(count === 1) {
this.anotherEltArrayOnlyChangedOnce = eltArray;
}
this.eltArray = eltArray;
});