有条件的setTimeout调用

时间:2016-03-14 18:59:50

标签: javascript node.js

就我所知,没有办法让setTimeout同步运行。

我有这个代码,其中foo是一个相当长的函数(20行左右)。

if(delay == null){
  function foo(){

  }()
}
else {
   setTimeout(function(){
     function foo(){

     }()
   }, delay);
 }

非常方便的是,如果setTimeout接受-1的延迟参数,然后就会同步/立即运行,如下所示:

var delay = delay || -1;

   setTimeout(function(){
     function foo(){

     }()
   }, delay);  // if delay is -1, will run immediately.

我认为这个功能不适用于setTimeout,是否有另一种方法可以防止必须两次写出foo函数?我唯一的好解决方案是创建一个辅助函数,但这不方便:)

3 个答案:

答案 0 :(得分:3)

试试这个:

<hr>

<div>
 
    <iframe width="560" height="315" src="https://www.youtube.com/embed/czpFFcw6Yfk" frameborder="0" allowfullscreen></iframe>

    <iframe width="560" height="315" src="https://www.youtube.com/embed/r2u2FS-gWmo" frameborder="0" allowfullscreen></iframe>
  

<div>
  <iframe width="560" height="315" src="https://www.youtube.com/embed/MvjlUrWo1KQ" frameborder="0" allowfullscreen></iframe>


  <iframe width="560" height="315" src="https://www.youtube.com/embed/F8qDtzlkFws" frameborder="0" allowfullscreen></iframe>
</div>

答案 1 :(得分:1)

  

还有另一种方法可以防止必须两次写出foo功能吗?

是的。

定义foo

function foo() {

}

然后在delay === -1时立即运行,否则在setTimeout

中运行
if (delay === -1)
    foo();
else
    setTimeout(foo, delay);

答案 2 :(得分:0)

这确实很老,但是您可以仅使用内联条件来设置时间延迟。

setTimeout(foo, isDelay ? delay : 0)