【问题标题】:Sleep in Javascript via timeout?通过超时在Javascript中休眠?
【发布时间】:2012-06-07 09:59:33
【问题描述】:

我想等待 1 分钟,然后执行一个函数 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 扩展的一部分。

【问题讨论】:

    标签: javascript firefox-addon timeout sleep wait


    【解决方案1】:

    试试

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

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

    【讨论】:

    • Afaik,bind 不兼容 IE6-8。
    • @Oleg 该代码用于firefox扩展,即使不是,您也可以在3行代码中制作bind的使用子集。
    • 哦,对了。没注意到...希望它不是
    【解决方案2】:

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

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

    它应该可以工作。将字符串传递给setInterval() 从来都不是一个好的解决方案,就像使用eval() 一样。

    另见

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        由于代码是为firefox扩展而设计的,你应该使用

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

        【讨论】:

          猜你喜欢
          • 2010-12-29
          • 1970-01-01
          • 2022-11-07
          • 2014-07-16
          • 1970-01-01
          • 2012-03-31
          • 2018-11-05
          • 2012-05-28
          • 2015-10-15
          相关资源
          最近更新 更多