有没有办法检查 clearTimeout 是否成功。
我有一个 javascript 函数,它以 30 秒的间隔异步运行。它是一个自调用函数,并使用 setTimeout() 在循环中重复自身。在特定情况下,我需要在某个事件发生后调用此函数。因此我首先 clearTimeout 并再次调用该函数。但我不知道我是否能够成功清除前一个循环,或者我现在开始了两个单独的循环。我可以做这样的事情吗?:
if(clearTimeout(timer))
alert("cleared");
Run Code Online (Sandbox Code Playgroud)
小智 5
“有没有办法检查 clearTimeout 是否成功。”
不,没有您可以检查的状态,但是如果您正确管理计时器,这应该不是问题。
我想您可以创建自己的有状态计时器对象...
var _slice = Array.prototype.slice;
// substitute for setTimeout
function myTimer(fn,ms) {
var args = _slice.call(arguments,2),
timer_state = {
complete: false,
timer: setTimeout(function() {
timer_state.complete = true;
fn.apply(this, args);
}, ms)
};
return timer_state;
};
// substitute for clearTimeout
function clearMyTimer(timer_obj) {
timer_obj.complete = true;
clearTimeout(timer_obj.timer);
};
Run Code Online (Sandbox Code Playgroud)
清除计时器的示例...
// create a timer
var timer = myTimer( function() {
console.log('timer is done');
}, 1000);
console.log( timer.complete ); // complete? false
clearMyTimer( timer ); // clear it
console.log( timer.complete ); // complete? true
Run Code Online (Sandbox Code Playgroud)
让它运行的例子......
// create a timer
var timer = myTimer( function() {
console.log('timer is done');
}, 1000);
console.log( timer.complete ); // complete? false
// check the timer object after it has expired
setTimeout(function() {
console.log( timer.complete ); // complete? true
}, 1500);
Run Code Online (Sandbox Code Playgroud)
编辑:更新以this在严格模式下保持一致,并支持传递给回调的附加参数。感谢@Saxoier的注释。