繁体   English   中英

异步代码执行

[英]Asynchronous code execution

我正在玩这个异步代码,虽然预计回调将在setTimeout后1 ms执行,而val的值将是它当时的值,所以我试图增加val的重新分配克服1ms的延迟,直到执行回调,但无论我添加了多少val的重新分配,val的值始终是最后一次赋值。 所以问题是,所有这些重新分配是否发生得如此之快以至于1ms足以在执行回调之前执行它们或者我在这里遗漏了什么?

    function asyncFunction(callback) {
       setTimeout(callback, 1);
    }

    var val= '1';

    asyncFunction(function() {
       console.log('The value is ' + val);
    });
    val= '2';
    val= '3';
    //...
    //... more asignments

    val = '1000'

JavaScript永远不会中断当前正在运行的函数来执行其他操作。

当您将函数传递给setTimeout ,将在满足以下所有条件时调用它:

  • 指定的时间已过
  • 已经过了setTimeout的最短时间
  • 没有其他功能正在执行

进一步阅读: 延误的原因超过规定时间

读取MDN - 延迟的原因超过指定的时间


重要的是要注意,在调用setTimeout()的线程终止之前,不能执行函数或代码片段。 例如:

function foo() {
    console.log('foo has been called');
}
setTimeout(foo, 0);
console.log('After setTimeout');

将写入控制台:

After setTimeout
foo has been called

因为即使调用setTimeout时延迟为零,它也会被放置在一个队列中并计划在下一次机会运行,而不是立即运行。 当前执行代码必须在执行队列上的函数之前完成,结果执行顺序可能不是预期的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM