为了账号安全,请及时绑定邮箱和手机立即绑定

执行清除js定时器操作,定时器清不掉

执行清除js定时器操作,定时器清不掉

现在场景如下:一个for循环里先执行一个异步的ajxa1(方法1),在for循环里下面又会开定时器(settimeout嵌套setinterval两个定时器)再这两个定时器里都会调用ajxa2(方法2)。现在我需要在方法1中的回调success或者error方法中清除与它对应生成的settimeout和setinterrval的定时器(方法1执行没有回调时定时器会一直调用方法2)。我现在的做法是在循环里最后面将定时器id保存在一个数组里的对象下,然后再方法1回调里进行清除,通过console.log可以确定回调里能获取到两个定时器id,并且执行清除操作,但是不知道为什么清除不掉定时器。
查看完整描述

4 回答

?
qq_巴黎的雨打湿东京的街_0

TA贡献6条经验 获得超2个赞

下次问问题二话不说直接上代码可还行?
从字面上来看

for(){
    ajax1({
        success:function(){清除两个定时器}
    })
    setTimeout(function(){setInterval(ajax2,5000)},5000) //包括取id
    arr.push(两id)
}

字面上来讲大致的结构是这样吧,那么问题来了;1.for循环里id的名字不能重复(可以省略掉);2.方法一的异步时间和settimeout的时间哪个快(可以调试的时候一步步看),如果方法1快,那么就不会执行到setInterval,但你说两个id都能打印出来,那么就可能不是这个原因了;3.你将这两个定时器拿出来测试看看能不能清除掉。4.还有一点,js作为一个单线程,用for循环搞定时器就算了,还搞ajax,可能某个地方起冲突了。

查看完整回答
1 反对 回复 2018-11-07
?
漂流風車

TA贡献70条经验 获得超21个赞

上代码,而且在ajax里家定时器可能会因为请求没回来家不上代码一级执行完了 所以没起效果

查看完整回答
反对 回复 2018-11-08
?
_Bling_

TA贡献18条经验 获得超2个赞

感觉是异步的问题,先执行了清除操作,具体上代码吧大家一起看

查看完整回答
反对 回复 2018-11-07
?
聪明的汤姆

TA贡献112条经验 获得超33个赞

贴代码

查看完整回答
反对 回复 2018-11-07
  • 4 回答
  • 0 关注
  • 8887 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信