首页 >web前端 >js教程 >尽管设置了延迟,为什么我的 setTimeout() 函数仍立即执行?

尽管设置了延迟,为什么我的 setTimeout() 函数仍立即执行?

Barbara Streisand
Barbara Streisand原创
2024-11-14 18:33:01536浏览

Why is my setTimeout() function executing immediately, despite setting a delay?

使用 setTimeout 延迟执行函数调用

在 JavaScript 中,使用 setTimeout() 安排稍后执行函数是异步编程的常用技术。但是,在某些情况下,尽管有延迟安排,但该函数仍会立即执行。了解 setTimeout() 的复杂性对于有效的异步执行至关重要。

在提供的上下文中,crawl() 函数旨在以大约 10 秒的间隔调用 doRequest() 函数。然而,该函数是立即执行的。

理解这个问题的关键在于setTimeout()的语法。提供函数作为参数时,重要的是指定函数本身,然后是延迟,然后是函数所需的任何参数。

可能的解决方案:

  1. 函数、延迟和参数:

    按以下方式调用 setTimeout():

    setTimeout(doRequest, proxytimeout, url, proxys[proxy]);

    这确保 doRequest() 是作为要执行的函数以及延迟和必要的参数传递。

  2. 函数作为字符串:

    或者,您可以传递 doRequest () 作为将被求值的字符串:

    setTimeout('doRequest('+url+','+proxys[proxy]+')', proxytimeout);

    这种方法需要更少的括号并提供更简洁的替代方案。

  3. 带闭包的匿名函数:

    将 doRequest() 包含在匿名函数中以防止循环内的参数更改:

    (function(u, p, t) {
       setTimeout(function() { doRequest(u, p); }, t);
    })(url, proxys[proxy], proxytimeout);

    此技术确保闭包中使用的变量保持一致,即使循环继续进行。但是,它比前面的选项稍微复杂一些。

根据您的具体需求,这些解决方案中的任何一个都将有效地安排 doRequest() 的执行并达到预期的延迟。了解 setTimeout() 的细微差别对于 JavaScript 中成功的异步编程至关重要。

以上是尽管设置了延迟,为什么我的 setTimeout() 函数仍立即执行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn