美文网首页
宏任务与微任务

宏任务与微任务

作者: RoyChina | 来源:发表于2019-11-26 12:06 被阅读0次

规则

  1. Js解析Function(整个script视为global Function)时,将同步任务排队到执行栈中,异步任务排队到事件队列中。

  2. 事件队列中的任务分为:
    宏任务:Function,CallBack :setTimeout,setInterval,setImmediate,I/O,UI交互事件
    微任务:PromiseCallBack process.nextTick MutationObserverCallBack

  3. 浏览器环境中执行方法时,先将执行栈中的任务清空,再将微任务推到执行栈中并清空,之后检查是否存在宏任务,若存在则取出一个宏任务,执行完成检查是否有微任务,以此循环…

  4. Event Loop在浏览器与node环境中的区别:
    浏览器环境每次执行一个宏任务,再去检查微任务
    node会清空当前所处阶段的队列,即执行所有task,再去检查微任务

栗子

  1. 首先执行所有宏任务 A.log1;B.setTimeout1将回调加入宏任务队列eventTable;C.创建Promise并执行构造函数中的log7,reolve将then的回调log8加入微任务队列;D.setTimeout2将回调加入宏任务队列eventTable;到此宏任务全部执行结束;
  2. 宏任务结束后执行当前微任务队列 a.log8;微任务队列结束;
  3. 宏任务队列eventTable中的两个setTimeout重新加入宏任务队列中,先执行A.setTimeout1的回调;执行A1.log2,执行A2.promise构造log4;加入微任务log5;宏任务A结束;执行微任务队列a.log5;
  4. 执行下一个宏任务setTimeout2;

注意:首次执行时,可以将整个代码理解为一个function, 一个global宏任务。

console.log('1');
setTimeout(function() {
    console.log('2');
    new Promise(function(resolve) {
        console.log('4');
        resolve();
    }).then(function() {
        console.log('5')
    })
})
new Promise(function(resolve) {
    console.log('7');
    resolve();
}).then(function() {
    console.log('8')
})
setTimeout(function() {
    console.log('9');
    new Promise(function(resolve) {
        console.log('11');
        resolve();
    }).then(function() {
        console.log('12')
    })
})

结果 1 7 8 2 4 5 9 11 12

相关文章

  • 浏览器的事件机制-Eventloop

    循环机制前,我们先要会区分:宏任务与微任务 宏任务Task与微任务Microtask JS中的宏任务和微任务的区别...

  • 宏任务与微任务

    规则 Js解析Function(整个script视为global Function)时,将同步任务排队到执行栈中,...

  • 宏任务与微任务

    宏任务:setTimeout和setInterval,Ajax,DOM事件微任务:Promise,async/aw...

  • 宏任务与微任务

    前言 ·什么是宏观任务,什么是微观任务? 宏任务:宿主(浏览器)发起的任务我们可以称之为宏观任务(macrotas...

  • 微任务与宏任务

    微任务(microtask)与宏任务(macrotask / task queue) 表示异步任务的两种分类 ht...

  • 宏任务与微任务

    宏任务与微任务相关知识点属于前端基础,掌握它对于项目优化和解决遇到的问题很有帮助,将我学习到的mark在此,以备忘...

  • 理解宏任务与微任务

    宏任务(macrotask )和微任务(microtask ) macrotask 和 microtask 表示异...

  • 宏任务与微任务理解

    前言 我们常常遇到这样的问题:在有setTimeout以及Promise等异步操作的情况下,执行顺序应该是什么样的...

  • eventLoop 宏任务与微任务

    最近一直准备面试,所以在过架构相关的基础知识(会涉及较多底层),会把很多基础知识都写出来,不过没办法什么都写,主要...

  • 宏任务、微任务

网友评论

      本文标题:宏任务与微任务

      本文链接:https://www.haomeiwen.com/subject/zmrewctx.html