使用 setTimeout 延迟执行函数调用
在 JavaScript 中,使用 setTimeout() 安排稍后执行函数是异步编程的常用技术。但是,在某些情况下,尽管有延迟安排,但该函数仍会立即执行。了解 setTimeout() 的复杂性对于有效的异步执行至关重要。
在提供的上下文中,crawl() 函数旨在以大约 10 秒的间隔调用 doRequest() 函数。然而,该函数是立即执行的。
理解这个问题的关键在于setTimeout()的语法。提供函数作为参数时,重要的是指定函数本身,然后是延迟,然后是函数所需的任何参数。
可能的解决方案:
函数、延迟和参数:
按以下方式调用 setTimeout():
setTimeout(doRequest, proxytimeout, url, proxys[proxy]);
这确保 doRequest() 是作为要执行的函数以及延迟和必要的参数传递。
函数作为字符串:
或者,您可以传递 doRequest () 作为将被求值的字符串:
setTimeout('doRequest('+url+','+proxys[proxy]+')', proxytimeout);
这种方法需要更少的括号并提供更简洁的替代方案。
带闭包的匿名函数:
将 doRequest() 包含在匿名函数中以防止循环内的参数更改:
(function(u, p, t) { setTimeout(function() { doRequest(u, p); }, t); })(url, proxys[proxy], proxytimeout);
此技术确保闭包中使用的变量保持一致,即使循环继续进行。但是,它比前面的选项稍微复杂一些。
根据您的具体需求,这些解决方案中的任何一个都将有效地安排 doRequest() 的执行并达到预期的延迟。了解 setTimeout() 的细微差别对于 JavaScript 中成功的异步编程至关重要。
以上是尽管设置了延迟,为什么我的 setTimeout() 函数仍立即执行?的详细内容。更多信息请关注PHP中文网其他相关文章!