订阅值更改与组合最新

  • 本文关键字:组合 最新 angular rxjs
  • 更新时间 :
  • 英文 :


我试图通过将产品的数量乘以它的价值来获得产品的总价格。 当我从列表中选择产品时,它有一个初始值和一个初始数量,然后我订阅两者的值更改以进行如下计算:

let initialQuantity = this.items.at(lastIndex).get("quantity").value;
let initialValue = this.items.at(lastIndex).get("productValue").value;
this.quantity$ = this.items.at(lastIndex).get("quantity").valueChanges;
this.productValue$ = (this.items.at(lastIndex).get("productValue").valueChanges;
combineLatest(this.quantity$, this.productValue$)
.pipe(
startWith([initialQuantity, initialValue]),
takeUntil(this._destroy)
)
.subscribe(([quantity, productValue]) => {
let totalPrice = quantity * productValue;
this.items.at(lastIndex).get("totalPrice").setValue(totalPrice);
});
});

问题是我必须更改这两个值才能combineLatest开始发射,即使我已经用startWith设置了初始值并且第一个结果显示正确。因此,如果我只更改数量或仅更改产品值,则不会发生任何情况。我做错了什么?

我认为你可以这样做:

combineLatest(
this.quantity$.pipe(startWith(initialQuantity)), 
this.productValue$.pipe(startWith(initialValue))
)
.pipe(
map(([quantity, value]) => quantity * value)
takeUntil(this._destroy)
).subscribe(/* ... */)

我还建议不要用太多的逻辑"膨胀"你的订阅回调,当可以使用运算符完成时(例如:上面的map(

最新更新