可以将javascript的'setInterval'配置为立即触发,并且间隔时间?

时间:2014-02-22 14:04:20

标签: javascript coffeescript

如果我想定期触发事件,我会使用类似(coffeescript)的内容:

setInterval (() => myFunction()), 300000

但是我经常要立即调用myFunction,然后定期调用。目前我通过调用setTimeout和setInterval来完成此操作,例如

setTimeout (() => myFunction()), 0
setInterval (() => myFunction()), 300000

myFunction()
setInterval (() => myFunction()), 300000

可以使用setInterval一步完成吗?

2 个答案:

答案 0 :(得分:2)

如果你的功能能够自行返回,那么是。

function myFunction() {
    // do some work

    return myFunction;
}

setInterval(myFunction(), 300000);

我会让你翻译成CS。

所以现在你调用函数而不是将它传递给setInterval()。该函数运行并返回自身,由setInterval()接收并按您的预期调用。


我不知道CS,但看起来你可能正在传递一个调用你的函数的匿名函数。

如果是这样,我不确定你为什么这样做,但它确实保证你可以采用这种方法,因为你不需要关心原始的返回值。

function myFunction() {
    // do some work
}

setInterval(function() {
    myFunction();

    return myFunction;
}(), 300000);

如果要在每个时间间隔运行的匿名函数中有更多工作要做,请为该函数命名并将return myFunction;更改为return callback;

function myFunction() {
    // do some work
}

setInterval(function callback() {
    myFunction();

    // some other work

    return callback;
}(), 300000);

答案 1 :(得分:1)

您可以创建setInterval()的自定义版本,该版本在开始时调用指定的函数,然后定期调用。

// custom version
window.setIntervalCustom = function(_callback, _delay) {
    _callback(); // call once
    return window.setInterval(_callback, _delay); // at intervals
};

// this will print 1 once at the start and then at intervals of 1000ms
setIntervalCustom(function() { console.log('1'); }, 1000);

注意:自定义函数已在上面重命名,以避免与其他libs / code thiat可能使用原始setInterval()

的任何冲突问题