JavaScript setTimeout setInterval 在一个函数内

发布于 2024-08-25 22:42:55 字数 628 浏览 4 评论 0原文

我想我可能太累了,但我一生都无法理解这一点,我认为这是由于缺乏 javascript 知识

var itv=function(){
 return setInterval(function(){
  sys.puts('interval');
 }, 1000);
}
var tout=function(itv){
 return setTimeout(function(){
  sys.puts('timeout');
  clearInterval(itv);
 }, 5500);
}

通过这两个函数,我可以调用

a=tout(itv());

并让循环计时器运行 5.5 秒,然后本质上是退出。



按照我的逻辑,这应该可行,但

var dotime=function(){
 return setTimeout(function(){
  clearInterval(function(){
   return setInterval(function(){
    sys.puts("interval");
   }, 1000);
  });
 }, 5500);
}

对此事的任何见解都不会受到赞赏。

I think I might be overtired but I cannot for the life of me make sense of this, and I think it's due to a lack of knowledge of javascript

var itv=function(){
 return setInterval(function(){
  sys.puts('interval');
 }, 1000);
}
var tout=function(itv){
 return setTimeout(function(){
  sys.puts('timeout');
  clearInterval(itv);
 }, 5500);
}

With these two functions I can call

a=tout(itv());

and get a looping timer to run for 5.5 seconds and then exit, essentially.


By my logic, this should work but it simply is not

var dotime=function(){
 return setTimeout(function(){
  clearInterval(function(){
   return setInterval(function(){
    sys.puts("interval");
   }, 1000);
  });
 }, 5500);
}

any insight in this matter would be appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

哆啦不做梦 2024-09-01 22:42:55

它无法工作,因为您的 setInterval 将在超时后被调用!您原来的方法是正确的,您仍然可以将其包装成单个函数:

var dotime=function(){
  var iv = setInterval(function(){
    sys.puts("interval");
  }, 1000);
  return setTimeout(function(){
    clearInterval(iv);
  }, 5500);
};

it cannot work because because your setInterval will be called AFTER the timeout! your original approach is correct and you can still wrap this into single function:

var dotime=function(){
  var iv = setInterval(function(){
    sys.puts("interval");
  }, 1000);
  return setTimeout(function(){
    clearInterval(iv);
  }, 5500);
};
葬花如无物 2024-09-01 22:42:55

我认为您犯的错误是函数 itv 不返回 setInterval(function(){ sys.puts('interval'); }, 1000)它执行 setInterval(function(){ sys.puts('interval'); }, 1000) 然后返回 setInterval 生成的 ID。然后将该 ID 传递给 clearInterval 函数以停止 setInterval(function(){ sys.puts('interval'); }, 1000) 正在执行的操作。

编辑:一个可用函数的示例。

var dotime=function(){
 // Start our interval and save the id
 var intervalId = setInterval(function(){
  // This will get executed every interval
  sys.puts("interval");
 }, 1000);

 // Start our timout function
 setTimeout(function(){
  // This will get executed when the timeout happens
  clearInterval(intervalId); // Stop the interval from happening anymore
 }, 5500);
}

I think the mistake you're making is that the function itv doesn't return setInterval(function(){ sys.puts('interval'); }, 1000) it executes setInterval(function(){ sys.puts('interval'); }, 1000) and than returns back an ID that setInterval generates. That ID is then passed to the clearInterval function to stop what setInterval(function(){ sys.puts('interval'); }, 1000) is doing.

Edit: An example of one function that would work.

var dotime=function(){
 // Start our interval and save the id
 var intervalId = setInterval(function(){
  // This will get executed every interval
  sys.puts("interval");
 }, 1000);

 // Start our timout function
 setTimeout(function(){
  // This will get executed when the timeout happens
  clearInterval(intervalId); // Stop the interval from happening anymore
 }, 5500);
}
深海夜未眠 2024-09-01 22:42:55

这是编写版本的另一种方式,您会看到您将一个函数传递给clearInterval,您应该在其中传递一个计时器id。

var dotime=function(){
 var g=function(){
  var f=function(){
   return setInterval(function(){
    sys.puts("interval");
   }, 1000);
  }
  clearInterval(f);
 }
 return setTimeout(g, 5500);
}

为了使它工作,你应该调用该函数:

  clearInterval(f());

或者,使用你的版本:

var dotime=function(){
 return setTimeout(function(){
  clearInterval(function(){
   return setInterval(function(){
    sys.puts("interval");
   }, 1000);
  }());
 }, 5500);
}

免责声明:我没有测试这个。

This is another way to write your version, you see that you pass a function to clearInterval, where you should have passed it a timer id.

var dotime=function(){
 var g=function(){
  var f=function(){
   return setInterval(function(){
    sys.puts("interval");
   }, 1000);
  }
  clearInterval(f);
 }
 return setTimeout(g, 5500);
}

To make it work you shoud call the function :

  clearInterval(f());

Or, using your version :

var dotime=function(){
 return setTimeout(function(){
  clearInterval(function(){
   return setInterval(function(){
    sys.puts("interval");
   }, 1000);
  }());
 }, 5500);
}

Disclaimer : I didn't test this.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文