Javascript 循环通过可观察数组并更新计算值
我有一个可观察的数组,我希望能够有一个公共值,其中包含一个来自数组内容的计算值Javascript 循环通过可观察数组并更新计算值,javascript,rxjs,observable,Javascript,Rxjs,Observable,我有一个可观察的数组,我希望能够有一个公共值,其中包含一个来自数组内容的计算值 @Injectable() export class PaymentsProvider { total: number = 0; private payments = new BehaviorSubject(<Payment[]>[]); payments$: Observable<Payment[]> = this.payments.asObservable(); co
@Injectable()
export class PaymentsProvider {
total: number = 0;
private payments = new BehaviorSubject(<Payment[]>[]);
payments$: Observable<Payment[]> = this.payments.asObservable();
constructor() {
console.log("init payments service")
this.total = 0
this.payments$.subscribe( payments => {
for (let payment of payments) {
this.total += payment.amount
}
})
}
}
@Injectable()
出口类付款提供程序{
总数:数字=0;
私人支付=新行为主体([]);
payments$:Observable=this.payments.asObservable();
构造函数(){
console.log(“初始支付服务”)
这个总数=0
此.payments$.subscribe(付款=>{
对于(让付款付款){
this.total+=payment.amount
}
})
}
}
这是可行的,我可以从其他组件调用This.paymentsService.total
,但是如果我离开页面组件并返回,即使payments
数组没有更改,值也会加倍
我应该用另一种方法来计算吗?Put
this.total=0代码>在订阅的回调中
此.payments$.subscribe(付款=>{
这个总数=0
对于(让付款付款){
this.total+=payment.amount
}
})
这就解决了问题。你能解释一下我为什么要这么做吗?我订阅过多次吗?我只是想确定我的设置是否正确每次付款发生变化时都会调用subscribe的回调函数,因此您必须重新计算total,并在计算开始时将其重置为0。