函数外为什么停不了?clearInterval

cs113dn 2021-03-31 07:52:51
private countDownTimer = 0;
private timeControl(second) {
if (second > 0) {
this.countDownTimer = egret.setTimeout(()=>{

}, this, 1000);

this.countDownTimer = egret.setInterval(function () {
if (second > 0 && this.bCanSelectFreeGame) {
second--;
// console.log('secound:', second);
let str: string = Utils.replaceString(Config.language['freeGameCountDown_' + Config.lang], [second]);
MainGameView.instance.changeGameTip(str);

if (second <= 0) {
// console.log("停止计时");
clearInterval(this.countDownTimer);//倒计时结束停止有效

let str: string = Utils.replaceString(Config.language['mainGame016_' + Config.lang]);
MainGameView.instance.changeGameTip(str);
}
}
}, this, 1000);
}
}



private onOpenButton(evt: egret.Event) {
let self = this;

clearInterval(this.countDownTimer);//倒计时还未结束时点击按钮停止无效?
}
...全文
245 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
cs113dn 2021-04-01
  • 打赏
  • 举报
回复
countDownTimer是类中的全局变量
Hello World, 2021-04-01
  • 打赏
  • 举报
回复
clearInterval(this.countDownTimer);//倒计时还未结束时点击按钮停止无效? 当执行这句时你预期的this是什么? 它有countDownTimer属性吗? 弄清楚作用域就明白了
cs113dn 2021-03-31
  • 打赏
  • 举报
回复
this.countDownTimer = egret.setTimeout(()=>{ }, this, 1000); 这句话不要,原打算换个写法
资源下载链接为: https://pan.quark.cn/s/abbae039bf2a 在Vue.js项目开发中,为了达到数据实时更新的效果,开发者常常需要借助定时任务来周期性地刷新数据接口。而要掌握如何在Vue项目里每30秒刷新一次接口,首先得了解定时器在JavaScript里的运行机制。JavaScript里常用的定时器函数有setInterval和setTimeout。setInterval的功能是依据设定的周期(单位是毫秒)来反复执行某个函数,像setInterval(func, milliseconds)这样用,它会一直循环调用func,直到用clearInterval止它。不过,setInterval存在一个比较常见的问题,那就是当func函数里有异步操作时,定时器不会下,这就会使得定时器任务不断累积,进而可能引发页面性能下降,甚至出现卡死的情况。而setTimeout则是让某个函数在延迟特定时间后执行一次,它不会像setInterval那样出现任务叠加的情况,因为每次执行完函数后它不会自动再次设置定时器。对于Vue项目中每30秒刷新接口的需求,虽然从表面上看setInterval似乎更适合,但直接用它存在页面卡死的风险。正确的做法是将setInterval和setTimeout结合起来使用,具体方式如下:javascriptwindow.setInterval(() => { setTimeout(fun, 0);}, 30000);这里,window.setInterval设置了一个每30秒触发一次的定时器,而在定时器里不是直接运行接口刷新函数,而是通过setTimeout来执行fun函数。setTimeout(fun, 0)表示尽可能快地执行fun函数,但不会立刻执行,而是等当前执行栈空闲了才执行,这样就能避免定时器任务叠加的问题。需注意,setI

87,996

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧