为什么我的 setTimeout 调度的函数没有立即执行?
您的代码旨在使用 setTimeout 函数调用 doRequest 来测试代理服务器间隔 10 秒。奇怪的是,这些函数是立即执行的,而不是按照预期的时间表执行。
理解问题
问题在于如何将 doRequest 函数传递给 setTimeout。当您指定一个函数作为第一个参数时,如 setTimeout(doRequest(url, proxys[proxy]), proxytimeout) 中,该函数将立即被调用。
解决方案
要解决该问题,您需要三个选项:
将参数作为单独的参数传递:
setTimeout(doRequest, proxytimeout, url, proxys[proxy]);
使用字符串表达式:
setTimeout('doRequest(' + url + ',' + proxys[proxy] + ')', proxytimeout);
在闭包中定义匿名函数:
(function(u, p, t) { setTimeout(function() { doRequest(u, p); }, t); })(url, proxys[proxy], proxytimeout);
第一个选项是首选,因为它更清晰、更明确。由于其“hacky”性质,第二个选项不太理想,而第三个选项可能很难理解,但可以防止循环内的值发生变化。
以上是为什么我的'setTimeout”函数立即执行而不是在预定时间执行?的详细内容。更多信息请关注PHP中文网其他相关文章!