我想将setInterval()返回的计时器ID放入其函数中:

delay_timeout = setInterval(function () {
    test_delay(data['time'], delay_timeout);
}, 1000);


可能吗?在我看来,delay_timeout目前没有任何价值...

我不想全局保存delay_timeout以便稍后在计时器函数中使用以停止它。多个计时器可能同时工作。

更新:

代码不是全局代码,位于以下位置:

socket.on('test_delay', function (data) {
    ...
});


关键不是要使delay_timeout全局化,并且不能在其回调函数中通过某种条件终止计时器。

最佳答案

如果将setTimeout调用放在它自己的函数中,则代码工作正常:

function setTimer(){
    var timeId = setTimeout(function(){ console.log(timeId); }, 1);
}

for(var i = 0; i < 10; i ++){
    setTimer();
}


here's a fiddle

delay_timeout变量可用于您的回调,因为它位于同一机柜中。

只要您不在同一上下文中,并在触发回调之前重新运行setTimeout,就可以了。所以这行不通:

var timeId;

for(var i = 0; i < 10; i ++){
     timeId = setTimeout(function(){ console.log(timeId); }, 1);
}


(请参阅小提琴的下半部分...)

07-24 09:39
查看更多