如果我想定期触发事件,我会使用类似(coffeescript)的内容:
setInterval (() => myFunction()), 300000
但是我经常要立即调用myFunction,然后定期调用。目前我通过调用setTimeout和setInterval来完成此操作,例如
setTimeout (() => myFunction()), 0
setInterval (() => myFunction()), 300000
或
myFunction()
setInterval (() => myFunction()), 300000
可以使用setInterval一步完成吗?
答案 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()