zoukankan      html  css  js  c++  java
  • JavaScript 中的正常任务与微任务

    正常情况下,JavaScript的任务是同步执行的,即执行完前一个任务,然后执行后一个任务。只有遇到异步任务的情况下,执行顺序才会改变。

    这时,需要区分两种任务:正常任务(task)与微任务(microtask)。它们的区别在于,“正常任务”在下一轮Event Loop执行,“微任务”在本轮Event Loop的所有任务结束后执行。

    console.log(1);
    
    setTimeout(function() {
      console.log(2);
    }, 0);
    
    Promise.resolve().then(function() {
      console.log(3);
    }).then(function() {
      console.log(4);
    });
    
    console.log(5);
    
    // 1
    // 5
    // 3
    // 4
    // 2

    上面代码的执行结果说明,setTimeout(fn, 0)Promise.resolve之后执行。

    这是因为setTimeout语句指定的是“正常任务”,即不会在当前的Event Loop执行。而Promise会将它的回调函数,在状态改变后的那一轮Event Loop指定为微任务。所以,3和4输出在5之后、2之前。

    正常任务包括以下情况。

    • setTimeout
    • setInterval
    • setImmediate
    • I/O
    • 各种事件(比如鼠标单击事件)的回调函数

    微任务目前主要是process.nextTick和 Promise 这两种情况。

    原文链接:http://javascript.ruanyifeng.com/advanced/timer.html

  • 相关阅读:
    C# 类库 嵌入其他Dll
    docker使用
    7DTD Server Manage
    Eclipse 快捷键-常用
    android webview
    手机摄像头拍摄的照片上传(js .net)
    .net执行存储过程慢,直接执行存储过程很快
    ASP.Net回送。数据提交另外页面
    Mysql详解--知识整理
    IDEA 运行Junit一直卡在Resolving Maven Dependencies
  • 原文地址:https://www.cnblogs.com/neverleave/p/6096772.html
Copyright © 2011-2022 走看看