我有一个每3秒运行一次的javascript函数,如果函数的前一个实例已经在运行,有没有办法做任何事情?如果相同的功能已经在运行,请不要做任何事情
回答
我假设你正在运行与setInterval
沉重的功能,并希望如果前一个没有完成,跳过一个勾号。
然后,而不是
function yourfoo() {
// code
}
setInterval(yourfoo, 3000);
做:
function yourfoo() {
// code
setTimeout(yourfoo, 3000);
}
setTimeout(yourfoo, 3000);
这保证了未来呼叫没有计划,直到前一个完成。
请记住,如果调用队列中已经有一个setInterval类型的已触发调用将被丢弃。所以如果你不想让代码紧接着执行,如果你的代码需要比指定的超时更长的时间来完成,那么重写就是必要的。否则它并不重要。无论如何:由于JavaScript的单线程特性,您的代码不会同时执行两次。 – koenpeters 2012-04-08 11:30:12
没有下降,只是排队 – Raynos 2012-04-08 11:55:13
那简单的解决方案!非常感谢 – Boos93 2012-04-08 12:20:49
是的。
这是默认完成的。
它被称为JavaScript是单线程的。
两个函数不能同时运行。
您可能会使用setInterval
它将在内部缓冲函数调用,直到任何当前正在运行的代码完成。
您可以定义一个布尔标志来指示函数在更高范围内的运行状态,并相应地打开或关闭它。
这是没有必要的。两个功能不能同时运行。你不需要像这样的锁定机制。 – Raynos 2012-04-08 11:08:03
JavaScript是单线程的,这意味着在给定的时间只有一个JavaScript块会被执行。所以,即使定时器启动,代码的执行也会排队等待下一个可用时刻。重要的是要知道,如果你使用的是setInterval,只有一个间隔“fire”会被排队,其他所有的间隔将被丢弃,直到队列中没有更多的这种间隔。
这里是如何工作的jQuery的父亲约翰Resig的一个很好的解释:http://ejohn.org/blog/how-javascript-timers-work/
你可以重写代码中使用setTimeout的,因为你保证,在未来的代码才会发生的执行这样在等待至少规定的毫秒数之后(如果执行被阻止,可以更多)。使用setInterval如果代码需要很长时间才能完成,则阻塞可能导致代码的背对背执行。
所以,做这样的事情,以防止背部到后端执行:
var nrOfMillisecondsToWait = 200;
setTimeout(function() {
.. your code here
}, nrOfMillisecondsToWait);
- 1. 如果它已经在运行,请不要运行python脚本
- 2. 如果已经运行在JVM中,如何指向相同的运行实例?
- 3. 如果已经运行,请退出VLC
- 4. Incron不要“吨做任何事情
- 5. 功能保持做同样的事情
- 6. 如果不是终端做任何事情,如何运行一个java类?
- 7. 推迟功能,如果它已经在statechange上运行 - js
- 8. PDO功能新功能没有做任何事情?
- 9. gclient同步不会做任何事情
- 10. JScrollBar不做任何事情
- 11. 没有在功能上做任何事情来关闭面板
- 12. 谷歌脚本 - 简单的功能没有做任何事情
- 13. jQuery的现成功能没有做任何事情
- 14. SHEmptyRecycleBin在VB6不会做任何事情
- 15. 寻找任何代码(javascript/jquery/ajax)喜欢能够暂停的JavaScript,只有当onclick其他不要做任何事情不要做任何事情
- 16. 如何在dataGridView中覆盖相同的行如果DateTime已经在行中?
- 17. 功能不会返回每次运行相同的结果
- 18. Javascript - 如果div已经显示,不要运行代码?
- 19. 更新/替换行,如果相同的ID已经存在
- 20. 如何在运行时重新执行相同的功能
- 21. 不同的功能,相同的结果
- 22. 相同的功能,不同的结果
- 23. 相同的功能,不同的结果
- 24. AsyncTask执行后做不同的事情?
- 25. $摘要已经运行 - AngularJS
- 26. 光泽功能`animate`似乎没有做任何事情
- 27. 调用映射功能似乎并没有做任何事情
- 28. Twitter喜欢注册 - 不要做任何事情,如果输入字段留空
- 29. WordPress的add_meta_box不会做任何事情
- 30. jQuery的.serialize()不会做任何事情
代码...... ????? – noob 2012-04-08 10:53:23
JavaScript代码永远不会同时运行,除非您使用网络工作者......是吗? – 2012-04-08 10:55:38