取消Javascript超时
Cancel Javascript timeout
我有一个长进程托管在Web服务器上。这个东西是由一个Web页面触发的,在用户点击一个按钮时。一些Javascript通过Ajax定期轮询,检查操作是否已在服务器端完成。为此,我使用setInterval
,然后使用clearInterval
来停止轮询。
如果这需要太长时间(例如服务器崩溃),我希望客户端通过某种超时来通知。我做了一些研究,发现了setTimeout
。问题是,如果操作在超时前成功完成,我想取消这个操作。
- 你会建议一个不同的方法吗?
只要你将interval的id存储在一个变量中,你就可以在任何时候使用它来清除interval。
var interval = window.setInterval(yourFunction, 10000);
...elsewhere...
window.clearTimeout(interval);
有关更多信息,请参阅Mozilla文档中的setInterval示例。
清除setTimeout,使用clearTimeout
您需要两个计时器(如您所说)
- 执行下一次轮询的重复间隔和
- 如果服务器没有响应,一次性过期放弃
如果轮询成功,则清除轮询间隔并取消失败定时器。如果过期计时器触发,您希望清除轮询间隔
var checkCount = 0;
function checkComplete() {
console.log("test " + checkCount);
if (checkCount++ > 10) {
console.log("clearing timeout");
window.clearInterval(pollInterval);
window.clearTimeout(expireTimer);
}
}
function cancelPolling(timer) {
console.log("clearing poll interval");
window.clearInterval(pollInterval);
}
var pollInterval = window.setInterval(checkComplete, 500);
var expireTimer = window.setTimeout(cancelPolling, 10000);
您可以调整checkCount
常数"10"—保持它较低以模拟轮询成功,提高它以在checkCount到达之前超时,模拟轮询失败。
相关文章:
- 使用javascript和随机暂停/超时快速循环文本
- iOS Safari Javascript设置超时问题
- CXP项目中的Javascript超时
- 将变量传递到超时函数的Javascript
- 可以clearTimeout删除JavaScript中已触发超时事件的未处理回调
- JAVASCRIPT-“;事件内部代码”;超时?o.o
- Chrome javascript调试器在超时时暂停,可以't调试单击事件
- iMacros + Javascript - 如何在页面超时时刷新
- 同步 Javascript 承诺超时以加班 Google 地理编码查询限制
- 如何在javascript中设置浏览器关闭时的会话超时
- Javascript设置超时和重定向-IE冻结
- PHP/Javascript会话超时并发出警告
- 如何一个接一个地运行javascript超时,而不是并行运行
- 进度栏中的Javascript会话超时倒计时
- javascript文件的异步加载超时
- javascript浏览器超时第二个计时器
- 重置设置超时-javascript
- 单击按钮超时javascript
- 使用超时javascript创建随机数
- 清除“设置超时Javascript”