【问题标题】:Delay first function call for n-seconds [duplicate]将第一个函数调用延迟 n 秒 [重复]
【发布时间】:2016-10-06 14:06:06
【问题描述】:

我有一个 javascript 函数,我设置了一个间隔,每 30 秒执行一次。这是我的代码:

function ping() {
    // code ...
}

ping(); // call function when page loads for first time

// call function every 30 seconds
window.setInterval(function(){
    ping();
}, 30000);

我想做的是将第一次调用(页面第一次加载时)延迟 5 秒,然后该函数应每 30 秒再次执行一次。

我尝试了setTimeout,但似乎不起作用,它立即执行任何想法我做错了什么?

setTimeout(ping(), 5000); // delay first call for 5 secs

// call function every 30 seconds
    window.setInterval(function(){
        ping();
    }, 30000);

【问题讨论】:

  • setTimeout(ping(), 5000); 更改为 setTimeout(ping, 5000);() 后跟函数名会立即调用它。
  • 如果您在 ping 调用中删除 (),这应该可以工作。

标签: javascript


【解决方案1】:

我猜你不会等到超时才声明间隔函数。

有几种不同的方法可以做到这一点,所以让我推荐一种:

function ping() {
    // code ...
}

setTimeout(function () {

    ping(); // call function when page loads for first time

    // call function every 30 seconds
    window.setInterval(function(){
        ping();
    }, 30000);
}, 5000);

【讨论】:

  • 是的,这似乎按预期工作。谢谢!
【解决方案2】:

您将立即拨打setTimeout(ping(), 5000);。您将ping() 的结果设置为超时函数。如果您希望 ping 被超时调用,那么要么执行 setTimeout(ping, 5000); 要么将其包装在一个闭包中,就像您第二次所做的那样。

【讨论】:

    猜你喜欢
    • 2020-04-29
    • 1970-01-01
    • 2022-01-18
    • 2016-03-22
    • 1970-01-01
    • 2016-03-22
    • 2012-12-04
    • 1970-01-01
    相关资源
    最近更新 更多