为了账号安全,请及时绑定邮箱和手机立即绑定

每60秒调用一个函数

每60秒调用一个函数

倚天杖 2019-07-09 10:49:35
每60秒调用一个函数使用setTimeout()可以在指定的时间启动一个函数:setTimeout(function, 60000);但是如果我想多次启动这个函数呢?每隔一段时间间隔,我都想执行这个函数(比方说,每60秒一次)。
查看完整描述

3 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

如果您不关心timer可能比间隔时间长,请使用setInterval():

setInterval(function, delay)

它一次又一次地激发作为第一个参数传入的函数。

一个更好的方法是setTimeout连同一个self-executing anonymous职能:

(function(){
    // do some stuff
    setTimeout(arguments.callee, 60000);})();

这保证了下一个调用不会在代码执行之前进行。我用arguments.callee在本例中作为函数引用。这是一个更好的方法,给函数一个名称,并调用它在setTimeout因为arguments.callee在ECMAScript 5中被废弃。


查看完整回答
反对 回复 2019-07-09
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

使用

setInterval(function, 60000);

编辑:(如果你想在时钟启动后停止它)

脚本部分

<script>var int=self.setInterval(function, 60000);</script>

和HTML代码

<!-- Stop Button --><a href="#" onclick="window.clearInterval(int);return false;">Stop</a>


查看完整回答
反对 回复 2019-07-09
?
潇湘沐

TA贡献1816条经验 获得超6个赞

更好地利用詹迪回答实现轮询功能,该功能将轮询每个interval几秒钟后结束timeout几秒钟。

function pollFunc(fn, timeout, interval) {
    var startTime = (new Date()).getTime();
    interval = interval || 1000;

    (function p() {
        fn();
        if (((new Date).getTime() - startTime ) <= timeout)  {
            setTimeout(p, interval);
        }
    })();}pollFunc(sendHeartBeat, 60000, 1000);

更新

根据注释,更新它以了解传递函数停止轮询的能力:

function pollFunc(fn, timeout, interval) {
    var startTime = (new Date()).getTime();
    interval = interval || 1000,
    canPoll = true;

    (function p() {
        canPoll = ((new Date).getTime() - startTime ) <= timeout;
        if (!fn() && canPoll)  { // ensures the function exucutes
            setTimeout(p, interval);
        }
    })();}pollFunc(sendHeartBeat, 60000, 1000);function sendHeartBeat(params) {
    ...
    ...
    if (receivedData) {
        // no need to execute further
        return true; // or false, change the IIFE inside condition accordingly.
    }}


查看完整回答
反对 回复 2019-07-09
  • 3 回答
  • 0 关注
  • 467 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信