通过超时在Javascript中睡觉

时间:2012-06-02 13:01:08

标签: javascript firefox-addon timeout sleep wait

我想等一分钟,然后执行一个函数 f()。我发现在 Javascript 中没有 sleep()函数,但我可以使用 setInterval() setTimeout( )功能。

window.setInterval()函数有效,但这不是我想要的。我只想执行一次 f()。我尝试使用 setTimeout() function,如下所示。

var MyNamespace {
  ...
  f: function() {
  },
  ...
  click: function() {
    ...
    setTimeout("this.f()", 60000); // f() is never executed
    // setTimeout(this.f(), 60000); f() is executed immediately without timeout
    // window.setTimeout(...) doesn't help
  },
  ...
}

这里可能有什么问题?

该代码是 Firefox 扩展程序的一部分。

4 个答案:

答案 0 :(得分:4)

你的问题是:"this.f()"。替换为:

setTimeout(this.f.bind(this), 60000);

它应该有效。将字符串传递给setInterval()绝不是一个好的解决方案,就像使用eval()一样。

另见

答案 1 :(得分:3)

尝试

setTimeout( this.f.bind(this), 60000 );

永远不要将字符串传递给setTimeout,因为它将在全局上下文中进行评估。

答案 2 :(得分:1)

如果您在chrome中运行计时器,请查看nsiTimer:https://developer.mozilla.org/en/nsITimer

答案 3 :(得分:0)

由于该代码用于Firefox扩展,因此应使用

setTimeout(function() { alert('timeout') },2000);

setTimeout(alert('timeout'),2000); // will be executed directly, not suitable