• 宏任务与微任务



    前言
    JavaScript是个单线程语言,所以就是说在执行一行代码的过程中,必然不会存在同时执行的另一行代码的情况。
    但如果大量的代码都是同步执行的话,程序将进入假死状态等待前面代码执行完毕,这显然不够友好。
    所以为了这种应对这种情况,有了异步的概念, JavaScript的处理很像一个分配任务的管理者,单收到一个异步任务或者请求时候,JavaScript引擎将任务放入一个任务队列中,JavaScript只做一个标识,用来接收成果或者分配任务。

    如网络请求就是一个天生的异步,此时程序告诉你的是,你可以去处理其他事情,而不是愣愣的等待。

    一、宏任务与微任务的执行顺序
      这可以抽象起来理解,举个例子,一个很简单的柜台原理,银行柜员接待客户,接待一个客户就是一个宏任务,这个客户,有可能办理信用卡业务,
    或者存款,取款,这些可以理解为微任务,当这个客户(宏任务)里面的所有业务(微任务)都办理完成后。才会进行下一个宏任务。

    执行片段如下:

     当前宏任务->当前宏任务中的所有微任务->下一个宏任务 

    二、宏任务与微任务有什么

    宏任务:
    setTimeout,setInterval,setImmediate

    补充:其中node支持setImmediate,而在浏览器上不建议(或不支持)使用,在MDN文档(https://developer.mozilla.org/en-US/docs/Web/API/Window/setImmediate)中也有提到,非标准功能。

    process.nextTick, MutationObserver, Promise

    三、例子

    如:

     1 new Promise((resolve, reject) => {
     2     setTimeout(()=> { // 宏任务
     3         console.log(1);
     4     })
     5     resolve(2);
     6 }).then(res => {
     7     console.log(res);
     8     return 3
     9 }).then(ress => {
    10     console.log(ress)
    11 })
    12 
    13 
    14 // 输出
    15 2
    16 3
    17 1

    由于settimeout属于宏任务,插入宏任务队列中,等待当前所有微任务执行完,才会继续执行。故而输出 2->3->1

    以梦为马
  • 相关阅读:
    js把秒数转换为HH:MM:SS及时分秒格式
    java将流量KB转换为GB、MB、KB格式
    java将秒数转换为时分秒格式
    springboot前端向后端请求返回html语句
    java判断手机号三大运营商归属的工具类
    Java读取txt文件、excel文件的方法
    Linux安装JDK、Mysql和Tomcat
    原理篇—文件包含漏洞
    原理篇—上传漏洞
    原理篇—CSRF 跨站脚本请求伪造
  • 原文地址:https://www.cnblogs.com/lsAxy/p/14091440.html
Copyright © 2020-2023  润新知