Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止JavaScript计时器重新进入_Javascript_Jquery_Timer_Setinterval - Fatal编程技术网

防止JavaScript计时器重新进入

防止JavaScript计时器重新进入,javascript,jquery,timer,setinterval,Javascript,Jquery,Timer,Setinterval,我的ASP.NETMVC页面使用JavaScript/jQuery每秒轮询我的数据库 这是工作,但我想确保,如果有一个延迟,我的计时器处理程序不会被再次调用之前,它已经返回 除了将计时器ID存储在全局变量中、清除我的处理程序中的计时器并在处理程序完成后重新启动计时器之外,还有什么其他的技巧 注意:我意识到每秒钟似乎都很频繁,但这段代码在提交信用卡付款后正在轮询我的服务器。通常,它只会运行一秒钟左右,我不希望用户等待的时间超过需要的时间。每秒轮询一次?太重了 撇开这一点不谈,如果使用的是,而不是。

我的ASP.NETMVC页面使用JavaScript/jQuery每秒轮询我的数据库

这是工作,但我想确保,如果有一个延迟,我的计时器处理程序不会被再次调用之前,它已经返回

除了将计时器ID存储在全局变量中、清除我的处理程序中的计时器并在处理程序完成后重新启动计时器之外,还有什么其他的技巧


注意:我意识到每秒钟似乎都很频繁,但这段代码在提交信用卡付款后正在轮询我的服务器。通常,它只会运行一秒钟左右,我不希望用户等待的时间超过需要的时间。

每秒轮询一次?太重了

撇开这一点不谈,如果使用的是,而不是。后者确保一段代码在给定的时间间隔内运行x次,而前者确保至少有x毫秒的延迟

function some_poller() {
    $.ajax({
       url: '/some_page',
       success: function() {
           setTimeout(some_poller, 1000);
       },
       error: function() { // Also retry when the request fails
           setTimeout(some_poller, 1000);
       }
    });
}

// Init somewhere
some_poller();

不太可能,尽管我不建议使用全局变量。将其粘贴到某个函数中


但是你真的确定你需要每秒钟都去投票吗?这是一个非常健谈的界面。

根据我个人的经验,一个“全局”(根函数内部)变量在这个实例中工作得非常好,因此您可以控制何时清除和重新启动。如果响应真的像您所说的那样快,那么这应该不会造成太多开销(清除/重置),并且可以考虑这些类型的情况。

我需要继续运行该代码,直到得到结果或等待太久。
setTimeout
只调用目标一次,然后清除该函数使用的任何内部计时器,这是否正确?换句话说,我可以使用它,但每次调用我的处理程序时,我必须再次调用
setTimeout
?@JonathanWood
setTimeout
不会清除任何内容,因为它应该运行一次函数<另一方面,code>setInterval,确保定期执行给定的函数。如果您仍然感到困惑,请阅读链接文档。