使用 setTimeout 意外立即执行函数
在尝试按特定时间间隔安排函数调用时,用户遇到 setTimeout 的问题尽管指定了超时,函数仍立即执行该函数。 doRequest 函数应该每隔 10 秒调用一次,但它是立即调用的。
立即执行的原因在于 setTimeout 函数的调用方式。以下代码片段演示了该问题:
setTimeout(doRequest(url, proxys[proxy]), proxytimeout);
在此代码中,doRequest 函数作为第一个参数传递给 setTimeout,但该函数是立即执行而不是被调度。
解决方案:
要解决此问题并确保 doRequest 被调度,可以通过三种替代方法使用 setTimeout:
将函数名称作为字符串传递:
setTimeout('doRequest(' + url + ',' + proxys[proxy] + ')', proxytimeout);
使用匿名函数:
(function(u, p, t) { setTimeout(function() { doRequest(u, p); }, t); })(url, proxys[proxy], proxytimeout);
先传递函数名称,然后传递参数:
setTimeout(doRequest, proxytimeout, url, proxys[proxy]);
以上是为什么我的setTimeout函数立即执行?的详细内容。更多信息请关注PHP中文网其他相关文章!