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

qq_巴黎的雨打濕東京的街_0
TA貢獻(xiàn)6條經(jīng)驗(yàn) 獲得超2個(gè)贊
下次問問題二話不說直接上代碼可還行?
從字面上來看
for(){ ????ajax1({ ????????success:function(){清除兩個(gè)定時(shí)器} ????}) ????setTimeout(function(){setInterval(ajax2,5000)},5000)?//包括取id ????arr.push(兩id) }
字面上來講大致的結(jié)構(gòu)是這樣吧,那么問題來了;1.for循環(huán)里id的名字不能重復(fù)(可以省略掉);2.方法一的異步時(shí)間和settimeout的時(shí)間哪個(gè)快(可以調(diào)試的時(shí)候一步步看),如果方法1快,那么就不會(huì)執(zhí)行到setInterval,但你說兩個(gè)id都能打印出來,那么就可能不是這個(gè)原因了;3.你將這兩個(gè)定時(shí)器拿出來測試看看能不能清除掉。4.還有一點(diǎn),js作為一個(gè)單線程,用for循環(huán)搞定時(shí)器就算了,還搞ajax,可能某個(gè)地方起沖突了。

漂流風(fēng)車
TA貢獻(xiàn)70條經(jīng)驗(yàn) 獲得超21個(gè)贊
上代碼,而且在ajax里家定時(shí)器可能會(huì)因?yàn)檎埱鬀]回來家不上代碼一級執(zhí)行完了 所以沒起效果
添加回答
舉報(bào)
0/150
提交
取消