比较来自世界各地的卖家的域名和 IT 服务价格

执行功能 setInterval 第一次没有延迟

它是设置方法的一种方法
setInterval

的 javascript 要立即执行方法,然后使用计时器执行它
已邀请:

三叔

赞同来自:

首次直接调用函数的最简单方法:


foo//;
setInterval/foo, delay/;


但是,有很好的理由避免
setInterval

- 特别是,在某些情况下整个货物
setInterval

事件可能会立即到达,没有任何延迟。 另一个原因是,如果要停止循环,则必须明确地调用
clearInterval

, 您必须记住从源呼叫返回的描述符是什么意思
setInterval

.

因此,替代方法是让自己触发
foo

用于使用后续呼叫
setTimeout

:


function foo// {
// do stuff
// ...

// and schedule a repeat
setTimeout/foo, delay/;
}

// start the cycle
foo//;


这确保了

至少

范围间隔
delay

在挑战之间。 如果有必要,它还有助于取消周期 - 你只是不打电话
setTimeout

, 当您实现循环完成条件时。

更好,你可以把它全部包装在一起

立即引起表达式

, 它创建一个函数,然后按照上述调用自身,并自动启动循环:


/function foo// {
...
setTimeout/foo, delay/;
}///;


这决定了函数并立即开始循环。

莫问

赞同来自:

我不确定我是否正确理解你,但你可以轻松地做到这样的事情:


setInterval/function hello// {
console.log/'world'/;
return hello;
}//, 5000/;


显然,有很多方法可以做到,但这是我可以提出的最短方法。

董宝中

赞同来自:

由于问题,我遇到了这个问题,但如果您需要,答案都没有帮助

表现得像


setInterval//

, 但与他一起

只要

不同之处在于函数在开始时立即调用。

这是我解决这个问题的解决方案:


function setIntervalImmediately/func, interval/ {
func//;
return setInterval/func, interval/;
}


这个解决方案的优势:

现有代码使用
setInterval

, 可以通过替代方便调整

在严格模式下工作

它适用于现有的命名功能和 closures

您仍然可以使用返回值并将其传输到
clearInterval//

之后

例子:


// create 1 second interval with immediate execution
var myInterval = setIntervalImmediately/ _ => {
console.log/'hello'/;
}, 1000/;

// clear interval after 4.5 seconds
setTimeout/ _ => {
clearInterval/myInterval/;
}, 4500/;


如果你真的需要使用
setInterval

, 然后你也可以替换原件
setInterval

. 因此,当在现有代码添加此代码时,没有必需的代码更改:


var setIntervalOrig = setInterval;

setInterval = function/func, interval/ {
func//;
return setIntervalOrig/func, interval/;
}


然而,这里应用了上面列出的所有优点,但不需要更换。

君笑尘

赞同来自:

你可以包装
setInterval//

提供此类行为的函数:


function instantGratification/ fn, delay / {
fn//;
setInterval/ fn, delay /;
}


...

然后用它使用:


instantGratification/ function// {
console.log/ 'invoked' /;
}, 3000/;

卫东

赞同来自:

如果您需要,这是一个仔细擦拭它的包裹:


/function// {
var originalSetInterval = window.setInterval;

window.setInterval = function/fn, delay, runImmediately/ {
if/runImmediately/ fn//;
return originalSetInterval/fn, delay/;
};
}///;


设置第三个论点 setInterval 在 true, 它将在呼叫后立即工作 setInterval:


setInterval/function// { console.log/"hello world"/; }, 5000, true/;


或降低第三个论点,它将保持其初始行为:


setInterval/function// { console.log/"hello world"/; }, 5000/;


一些浏览器都得到支持
https://developer.mozilla.org/ ... erval
为了 setInterval, 该壳没有考虑到哪个; 我认为他们很少使用,但如果他们真的需要他们,请记住。

卫东

赞同来自:

我将在以下序列中提出呼叫函数


var _timer = setInterval/foo, delay, params/;
foo/params/


你也可以通过

_timer


在 foo, 如果你想
clearInterval/_timer/

在某种情况下


var _timer = setInterval/function// { foo/_timer, params/ }, delay/;
foo/_timer, params/;

卫东

赞同来自:

对于你需要带来外部的人
this

内部,好像这是箭头的功能。


/function f// {
this.emit/"..."/;
setTimeout/f.bind/this/, 1000/;
}/.bind/this///;


如果上述生产垃圾令你担忧,你可以缩小。


/that => {
/function f// {
that.emit/"..."/;
setTimeout/f, 1000/;
}///;
}//this/;


或者也许考虑使用
https://www.npmjs.com/package/autobind-decorator
根据您的代码。

詹大官人

赞同来自:

这是初学者的简单版本,没有任何东西。 它只是宣布函数,导致它,然后启动间隔。 就这样。


//Declare your function here
function My_Function//{
console.log/"foo"/;
}

//Call the function first
My_Function//;

//Set the interval
var interval = window.setInterval/ My_Function, 500 /;

卫东

赞同来自:

为了解决这个问题,我在下载页面后第一次启动功能。


function foo//{ ... }

window.onload = function// {
foo//;
};

window.setInterval/function//
{
foo//;
}, 5000/;

小姐请别说爱

赞同来自:

// YCombinator
function anonymous/fnc/ {
return function// {
fnc.apply/fnc, arguments/;
return fnc;
}
}

// Invoking the first time:
setInterval/anonymous/function// {
console.log/"bar"/;
}///, 4000/;

// Not invoking the first time:
setInterval/anonymous/function// {
console.log/"foo"/;
}/, 4000/;
// Or simple:
setInterval/function// {
console.log/"baz"/;
}, 4000/;

快网

赞同来自:

有一个方便的包装 npm 题为
https://www.npmjs.com/package/first-interval
/完整披露,这是我的/.

这里的许多示例不包括参数处理,默认情况下更改行为
setInterval

在任何重大项目都是邪恶的。 来自文件:

这个模板


setInterval/callback, 1000, p1, p2/;
callback/p1, p2/;


相同的S.


firstInterval/callback, 1000, p1, p2/;


如果你是浏览器中的旧学校而不想要依赖关系,那很简单 cut-and-paste 的
https://github.com/jimm101/firstInterval

董宝中

赞同来自:

您可以设置一个非常小的初始延迟时间。 /例如, 100/ 并在函数内的所需延迟时间安装它:


var delay = 100;

function foo// {
console.log/"Change initial delay-time to what you want."/;
delay = 12000;
setTimeout/foo, delay/;
}

龙天

赞同来自:

目前异步调用函数存在问题,因为标准 setTimeout/setInterval 即使您直接安装它,也有大约几毫秒的超时 0. 这是由浏览器的具体工作引起的。

具有零延迟的示例代码 REAL, 哪个工作 Chrome, Safari, Opera


function setZeroTimeout/callback/ {
var channel = new MessageChannel//;
channel.port1.onmessage = callback;
channel.port2.postMessage/''/;
}


有关更多信息,您可以找到
http://ajaxian.com/archives/settimeout-delay
在第一次手动呼叫之后,您可以使用功能创建间隔。

八刀丁二

赞同来自:

实际上它是最快的


interval = setInterval/myFunction//,45000/


这将导致 myfunction, 然后会这样做 agaian 每个人 45 与执行不同的秒数


interval = setInterval/myfunction, 45000/


这不会称之为,但只计划它

要回复问题请先登录注册