【问题标题】:What is this timeout-related feature of javascript called?javascript的这个与超时相关的功能叫什么?
【发布时间】:2013-11-07 22:05:49
【问题描述】:

我对这种行为很熟悉,但没有词汇来描述(因此谷歌)它。

setTimeout(function () { alert("timeout!"); }, 1000);
veryLongProcess();  // lasts longer than 1000 milliseconds

我相信这样做的结果是您在漫长的过程完成后收到警报,即代码执行后超过 1 秒。我想这是超时将函数发送到某个单独的“线程”或“堆栈”或“循环”,这些函数只能在当前线程完成后开始,即使当前线程花费的时间比超时时间长最初指定为。

这个有名字吗?我如何才能详细了解它的工作原理?

【问题讨论】:

  • 我相信你要找的词是“延迟”。
  • '我认为这是超时将函数发送到某个单独的“线程”或“堆栈”或“循环”,这些函数只能在当前线程完成后开始,即使当前线程需要比最初指定的超时时间长。' - 作为对正在发生的事情的近似或非技术描述,这是正确的。 JavaScript 是单线程的(如果你忽略 web worker),所以setTimeout 将一个函数排队等待稍后在同一个线程上运行,然后如果其他 JS 正在运行,那么超时就会延迟。
  • @Bryce Hanscomb 的 cmets 帮我找到了这个:stackoverflow.com/questions/2035645/…

标签: javascript timeout settimeout


【解决方案1】:

我相信您可能正在寻找术语“同步”编程。

由于 JavaScript 是单线程的,您的 veryLongProcess() 实际上会导致警报在 1000 毫秒后触发,因为称为 阻塞

请注意,阻止 JavaScript 会显着降低用户体验,例如锁定浏览器,或导致浏览器显示“终止脚本”对话框,从而破坏进程的功能。

【讨论】:

    【解决方案2】:

    您要查找的内容称为“回调函数”。您可以将函数作为变量传递给其他函数,然后在需要时执行它们。我写了一个关于它如何在下面工作的快速示例(未经测试)。

    function longProcess(callback){
        //a bunch of code execution goes here
        var testNumber = 5;
    
        //This portion of code happens after all desired code is run
        if (callback != undefined){  //Check to see if a variable 'callback' was passed... we're assuming it's a function
            callback(testNumber);    //Execute the callback, passing it a value
        }
    }
    
    function testCallback(number){
        alert("Number: " + number);  //Alert box will popup with "Number: 5"
    }
    
    longProcess(testCallback);       //Call your long process, passing another function as a variable
    

    【讨论】:

    • OP 没有询问回调。问题是什么导致超时被延迟。
    • 我误解了问题的重点,但是回调仍然是相关的。 setTimeout 函数传递一个回调函数,该函数在 1 秒后执行。对我来说,这听起来像是 OP 在询问与异步相关的执行,其中最常见的 javascript 是 AJAX,它是异步的并且大量使用回调函数。
    猜你喜欢
    • 2018-12-19
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 2010-10-01
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多