zoukankan      html  css  js  c++  java
  • 宏任务(macrotask)和微任务(microtask)异步任务的分类

    /*
    * 宏任务
    *   分类: setTimeout setInterval requrestAnimationFrame
    *   1. 宏任务所处的队列就是宏任务队列
    *   2. 第一个宏任务队列中只有一个任务: 执行主线程的js代码
    *   3. 宏任务队列可以有多个
    *   4. 当宏任务队列的中的任务全部执行完以后会查看是否有微任务队列如果有先执行微任务队列中的所有任务,如果没有就查看是否有宏任务队列
    *
    * 微任务
    *   分类: new Promise().then(回调) process.nextTick
    *   1. 微任务所处的队列就是微任务队列
    *   2. 只有一个微任务队列
    *   3. 在上一个宏任务队列执行完毕后如果有微任务队列就会执行微任务队列中的所有任务
    * */
     
    console.log('----------------- start -----------------');
    
    setTimeout(() => {
      console.log('setTimeout');
    }, 0)
    
    new Promise((resolve, reject) =>{
      for (var i = 0; i < 5; i++) {
        console.log(i);
      }
      resolve();  // 修改promise实例对象的状态为成功的状态
    }).then(() => {
      console.log('promise实例成功回调执行');
    })
    
    
    
    console.log('----------------- end -----------------');

    结果:

    ----------------- start -----------------
    0
    1
    2
    3
    4
     ----------------- end -----------------
     promise实例成功回调执行
    setTimeout

    异步执行顺序是先执行微任务,再执行宏任务(宏任务是异步(宏任务里面也是先微任务再宏任务))

    顺序是: 先同步加一条异步的微任务

    ,再异步,加上 宏任务和微任务

    同步从上之下执行

  • 相关阅读:
    Openjudge 1.3 算数表达式与顺序执行
    Openjudge 1.2 变量定义、赋值并转换
    Openjudge 1.4 逻辑表达式与条件分支
    Openjudge 1.5 循环控制
    Openjudge 1.6 一位数组
    Openjudge 1.8 多维数组
    poj-3134 ida*||记录路径bfs
    wust-1588 日期模拟题
    wust 1599弗洛伊德
    hdu5667 费马小定理加矩阵快速幂
  • 原文地址:https://www.cnblogs.com/queenDream/p/13476522.html
Copyright © 2011-2022 走看看