ошибка при установке глобальной переменной во время рекурсии в ember.js - PullRequest
0 голосов
/ 03 мая 2019

, поэтому я реализовал таймер в своем коде ember, который работает нормально, но во время выполнения теста он терпит неудачу, я получаю эту ошибку, говоря

Uncaught Error: Assertion Failed: calling set on destroyed object: <front@component:qwtery/my-comp::ember629>.timer = 9

, что это происходит только тогда, когда я запускаю тесты

и вот мой код

didReceiveAttrs(){
    this._super(...arguments);
    this.set('timerStop', false);
    this.set('anotherTimer', 0);
    this.set('timer', null);
    var timeLimit = this.get('question.time_limit');
    if(timeLimit > 0)
    {
      this.set('timerEnabled', true);
      this.timerFunc(timeLimit,0);
    }
  },

timerFunc: function(count, val) {
    if (count >= 0 && !this.get('timerStop')) {
      this.set('timer', count);
      this.set('anothertimer', val);

      var a = setTimeout(() => {
        return this.timerFunc(count-1, val+1);
      }, 1000)
    }
    else {
      code to show message that timer has stopped
    }
  }

Так что, если это неправильный способ реализации таймера, почему я получаю сообщение "набор вызовов для уничтоженного объекта:" только во время выполнения тестаа не пока я пробую это вручную

1 Ответ

2 голосов
/ 03 мая 2019

Вам нужно очистить таймеры, когда компонент собирается уничтожить. Вы можете использовать willDestroyElement крючок. См .: Ember Guide

Кроме того, вы можете проверить if (this.get('isDestroyed') ), чтобы увидеть, уничтожен ли компонент или нет. Api Doc . Это может быть быстрой победой, но я не думаю, что это правильный путь. Очистка таймеров - правильный путь.

Во-вторых, не используйте setTimeout. Вместо этого используйте later. См .: Ember Guide

...