javascript - 如何确保一次只运行一个递归 setTimeout 链?

标签 javascript recursion google-chrome-extension settimeout

我正在制作一个供个人使用的 chrome 扩展,它将递归调用 setTimeout。我想确保此扩展在任何情况下都不会意外产生多个 setTimeout 链。

我已经做到了,当我点击浏览器操作时,它会调用 clearTimeout。但是,我担心当我重新加载扩展时旧的超时链会继续吗?可能还有其他我没有想到的场景。是否有一种行之有效的方法来防止意外创建多个超时链?

看起来没有办法枚举事件的 javascript 计时器:Viewing all the timouts/intervals in javascript?

最佳答案

我以前解决过类似的案例:

var timer;
function foo(){
  if(!timer)
    timer = setTimeout(function (){
      //should print once every second only
      console.log(new Date());
      timer = null;
      foo();
  }, 1000)
}

foo();
foo();

由于 javascript 在处理下一个事件之前运行同步代码直到完成,这是安全的。

关于javascript - 如何确保一次只运行一个递归 setTimeout 链?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33176554/

相关文章:

通过单击页面上的任意位置调用 JavaScript __dopostback

javascript regex - 为什么我捕获的字符串是错误的?

javascript - 如何在javascript中取消嵌套这个递归算法?

c++ - C++中的Pascal Triangle递归程序优化

google-chrome - Chrome 扩展程序最大消息长度

google-chrome-extension - 以编程方式进入多功能框模式

javascript - 是否可以在浏览器上编辑工具提示的字体系列?

javascript - Javascript 中的内在类型是什么?

javascript - API 不是来自 AngularJS,但可以在浏览器上运行

java - 培根游戏Java程序?