ren*_*ren 14 javascript setinterval
假设我有setInterval(PostToServer, 1000);
.PostToServer
函数使ajax发布,可能需要超过一秒钟.那么接下来会发生什么:在第一次呼叫未完成或等待呼叫结束之前进行第二次呼叫,然后再制作新呼叫?
jfr*_*d00 10
Javascript是带有事件队列的单线程(不包括此问题的HTML5 Web工作者).后续呼叫setInterval()
将永远不会开始,直到上一次呼叫完成.一次只能有一个活跃.
当您的间隔时间发生时,JS引擎内部会启动计时器并将事件添加到javascript事件队列中.当当前运行的JS执行线程完成(而不是之前)时,JS引擎继续从事件队列中获取下一个事件并启动JS执行的线程.因此,JS中的两个执行路径将永远不会重叠或同时进行.因此,来自setInterval()的两个函数调用永远不会重叠.第二个在第一个完成执行之前不会启动.
但是,相对于你的问题,这意味着两个间隔从setInterval()
不会重叠,但是如果你在第一个间隔计时器上进行异步ajax调用并且ajax调用的启动立即完成,并且第二个间隔触发在第一个异步ajax调用触发它的完成函数之前,你的ajax调用将会或可以重叠.
如果你想一次防止多个ajax调用正在进行中,你必须编写一些代码来专门防止这种情况,或者通过不触发第二个ajax调用直到前一个调用完成,或者只是跳过任何ajax调用前一个仍在继续.
有关JS事件队列及其工作原理的更多信息,请参阅此文章.
电话重叠.
setInterval
确保定期运行功能,而无需等待以前的结果.
如果要等待响应,请将interval方法更改为轮询器.当时间已过并且服务器已经响应时,再次请求.
由于响应后服务器响应不会发生太大变化,因此您还可以setTimeout
在AJAX方法的回调函数中添加处理程序.
归档时间: |
|
查看次数: |
4677 次 |
最近记录: |