Ошибка диапазона максимальный стек вызовов превышает в угловых 6 - PullRequest
0 голосов
/ 12 октября 2018

Я делаю приложение для корзины покупок, когда пользователь отменяет выбор из контрольного списка, мне нужно минус от общей суммы, и я использую Поведенческую тему для обновления общей суммы каждый раз, когда пользователь добавляет или удаляет через общую службу.После минус от общей суммы я снова обновляю значение предмета соответственно.Но здесь я получаю, что стек ошибок превышает.

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 () выполняется каждый раз при отмене выбора элемента, а затем обновляет общую сумму в общем сервисе.я не знаю, где я делаю ошибку.

1 Ответ

0 голосов
/ 12 октября 2018

Ошибка превышения максимального стека вызовов происходит в основном, когда функция подвергается бесконечной рекурсии.Разве это не очевидно в коде, что вы подписались на то, что снова обновляет значение.В вашем коде вы делаете

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);
        }
    });
}

Это не приведет к рекурсивным условиям.Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...