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。