可以clearTimeout删除JavaScript中已触发超时事件的未处理回调
Can clearTimeout remove an unprocessed callback of a fired timeout event in JavaScript?
如果我为已经触发但回调仍在执行队列中的setTimeout
事件调用clearTimeout
,clearTimeout
还会阻止处理该事件吗?
换句话说,在定时器启动及其回调执行的延迟期间,是否仍有可能清除超时事件?
非正式地说,我的猜测是,一旦超时触发,它就会将回调排队并自行销毁——使具有该计时器id的clearTimeout
对排队的回调没有影响。
我认为答案是肯定的。(我现在正在使用Firefox。)
编辑—为了完整性,我构建的测试是:
var t1 = setTimeout(function() {
clearTimeout(t2);
}, 0);
var t2 = setTimeout(function() {
alert("hello world");
}, 0);
这个想法是,在脚本块完成后,两个定时器都应该立即"就绪",并且它们应该按照请求的顺序运行。因此,"t1"应该在浏览器运行回调之前清除"t2"。因为没有发生alert()
,所以我得出结论,clearTimeout()
调用"有效",因为它阻止了第二个回调的运行,即使它的计时器已经过期。
我不熟悉浏览器中的具体工作方式,因此可能存在clearTimeout()
没有相同效果的情况。不管怎么说,考虑到执行模型,这似乎是非常不确定的。
相关文章:
- node.js测试事件是否是在不使用超时的情况下使用sinon.js发出的
- 如何在jQuery事件处理程序中存储和重用超时
- 可以clearTimeout删除JavaScript中已触发超时事件的未处理回调
- 替换的超时事件触发两次或两次以上(有时)
- JAVASCRIPT-“;事件内部代码”;超时?o.o
- Chrome javascript调试器在超时时暂停,可以't调试单击事件
- 添加事件以防止Inappbrowser内超时
- SSE (事件源) 在 1 小时 22 分钟后超时.有没有办法让它持久化
- 为接收事件的函数调用设置超时不适用于 IE7
- 如何使用角度休息服务设置超时回调事件
- 在事件侦听器触发期间设置超时不起作用
- 为什么超时在“;点击“;事件循环在Firefox上完成
- 使用RxJS重置事件超时
- socket.io事件重新连接超时
- 设置超时计时器事件
- 如何通过两个嵌套的匿名函数(一个带有超时的事件处理程序)传递变量
- 表单按钮在javascript中重写超时事件
- SignalR处理客户端超时事件
- 有条件地基于超时调用jquery事件
- 只允许CSS悬停事件超时后使用JavaScript