gpt4 book ai didi

javascript - 在 ember.js 中递归期间设置全局变量时出现错误

转载 作者:行者123 更新时间:2023-12-01 01:02:12 25 4
gpt4 key购买 nike

所以我在我的 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
}
}

因此,如果这不是实现计时器的正确方法,为什么我仅在运行测试时收到消息“在被破坏的对象上调用设置:”,而不是在手动尝试时收到消息

最佳答案

当组件即将销毁时,您需要清除计时器。您可以使用 willDestroyElement Hook 。请参阅:Ember Guide

或者,您可以检查 if (this.get('isDestroyed') ) 以查看组件是否已销毁。 Api Doc 。这可以是一个快速的胜利,但我认为这不是正确的方法。清除定时器是正确的方法。

其次,不要使用setTimeout。而是使用稍后。请参阅:Ember Guide

关于javascript - 在 ember.js 中递归期间设置全局变量时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55963826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com