范围误差最大调用堆栈超过角度 6



我正在做购物车应用程序,当用户从清单中取消选择项目时,我需要从总金额中减去,并且我正在使用行为主体来更新总金额每次用户通过共享服务添加或删除时。从总金额中减去后,我再次相应地更新主题值。但是在这里我得到了超过错误堆栈。

onItemDeSelect(uncheckedItem) {
this.eachItem.itemExtraOptionPrice.prices.forEach(item => {
this.shared.updateAmountValue.subscribe(value => {
if (item.id === uncheckedItem.id) {
this.totalAmount = value - item.amount;
this.shared.updatedAmount(this.totalAmount);
}
});
});
}
updateAmountValue: BehaviorSubject<number> = new BehaviorSubject(0);
updatedAmount(value) {
this.updateAmountValue.next(value);
}

这里 onItemDeSelect(( 函数每次在取消选择项目时执行,然后更新共享服务中的总金额。 我不知道我哪里做错了。

超出最大调用堆栈错误主要发生在函数经历无限递归时。这在代码中不是很明显吗,您已经订阅了再次更新值的东西。在你正在做的代码中

this.shared.updatedAmount(this.totalAmount);

这将更新值并触发与行为主体的偶数

updateAmountValue: BehaviorSubject<number> = new BehaviorSubject(0);

并且您已经订阅了此主题,它将再次更新值等,从而导致无限递归状态。

可能的解决方案

可以直接获取主题的值,而不是订阅它。

onItemDeSelect(uncheckedItem) {
this.eachItem.itemExtraOptionPrice.prices.forEach(item => {
let value = this.updateAmountValue.getValue();
if (item.id === uncheckedItem.id) {
this.totalAmount = value - item.amount;
this.shared.updatedAmount(this.totalAmount);
}
});
}

这不会导致任何递归条件。希望这有帮助。

最新更新