如果我有以下代码:
var myfunc = function() { alert('wow'); };
var t=setTimeout(myfunc, 300);
我可以使用t
中存储的ID来验证计时器的持续时间和回调吗?我正在尝试直接验证计时器的属性,所以我不必实际运行它,直到我的单元测试超时。
答案 0 :(得分:1)
不,不能做。
你可以做的是用不同的方式跟踪它们,如下所示:
var timeouts = [{
fn: myfunc,
timeout: 300
}];
for(var i = 0; i < timeouts.length; i++){
timeouts[i].id = window.setTimeout(timeouts[i].fn, timeouts[i].timeout);
}
答案 1 :(得分:0)
返回的ID是浏览器的内部ID,因此您无法使用它。但是,既然您在启动计时器时知道持续时间和回调,那么您也可以将整个事情包装在Timer
类中,为您完成所有事情:
function Timer(callback, timeout) {
this.callback = callback;
this.timeout = timeout;
this.id = window.setTimeout(callback, timeout);
}
Timer.prototype.cancel = function() {
window.clearTimeout(this.id);
}
Timer.prototype.fire = function() {
this.cancel();
this.callback();
}
然后您只需创建计时器并访问其属性,如下所示:
t = new Timer(myfunc, 300);
alert(t.timeout);