美文网首页
2018-06-08 宏任务和微任务

2018-06-08 宏任务和微任务

作者: 彭奕泽 | 来源:发表于2018-06-08 22:54 被阅读0次

js先把宏任务放进宏任务队列里,再把微任务放进微任务队列里,执行的时候先执行宏任务队列里的一个任务,再把微任务队列里的所有任务执行完毕,再去执行宏任务队列里的一个任务,再去把微任务清空......一直交替进行

1. macroTask(宏任务)

所有同步JS代码、setTimeout(),setInterval()的任务都是宏任务,它们会被加进Event Queue(宏任务的事件队列)

2. microTask(微任务)

所有promise和process.nextTick()都是微任务,它们也会被加进Event Queue(微任务的事件队列)

3. 面试题1

console.log('script start')
setImmediate(()=>{
  console.log('setImmediate')
})
setTimeout(()=>{
    console.log('setTimeout');
    process.nextTick(function() {  
        console.log('process.nextTick2');  
    });  
})
process.nextTick(function() {  
  console.log('process.nextTick1');  
});  
Promise.resolve().then(()=>{
    console.log('promise1')
}).then(()=>{
    console.log('promise2')
})

console.log('script end')

请问执行顺序?
若是刚启动nodejs,则是:

  1. script start
  2. script end
  3. process.nextTick1
  4. promise1
  5. promise2
  6. setTimeout
  7. process.nextTick2
  8. setImmediate

若不是刚启动,则是:

  1. script start
  2. script end
  3. process.nextTick1
  4. promise1
  5. promise2
  6. setImmediate
  7. setTimeout
  8. process.nextTick2

所以,先执行宏任务(所有同步的js代码),再清空微任务队列(promise1、promise2),再执行宏任务,由Event Loop的 3. check 可知,若是刚启动nodejs,则setTimeout在前,不然都是set Immediate在前

4. 面试题2

setTimeout(function(){  
  console.log('1')  
});  
  
new Promise(function(resolve){  
  console.log('2');  
}).then(function(){  
      console.log('3')  
    });  
  
console.log('4');  

2 4 3 1
因为2是同步代码

相关文章

  • 2018-06-08 宏任务和微任务

    js先把宏任务放进宏任务队列里,再把微任务放进微任务队列里,执行的时候先执行宏任务队列里的一个任务,再把微任务队列...

  • 微任务和宏任务@小四@王云飞

    微任务和宏任务 微任务 和 宏任务 表示异步任务的两种分类。 微任务(microtask)和宏任务(macrota...

  • 宏任务和微任务

    [js 宏任务和微任务] .宏任务(macrotask )和微任务(microtask ) macrotask 和...

  • 宏任务 和 微任务

    宏任务: 当前调用栈执行的代码成为宏任务,(主代码块和定时器)也或者宿主环境提供的叫宏任务 这些任务包括: 渲染事...

  • 宏任务和微任务

    介绍这个之前, 建议先了解一下事件循环[https://www.jianshu.com/p/106867eee55...

  • 宏任务和微任务

    浏览器是多线程执行代码,渲染的。但是浏览器只给JS一个线程来执行,因此JS是单线程。因此代码都是同步执行的,但是J...

  • # 宏任务和微任务

    首先说明 首先在JavaScript中,有同步代码和异步代码.这点很清晰. 代码的执行优先级顺序是,同步代码执行优...

  • 微任务和宏任务

    JS是单线程的,可以把这个线程叫做主线程,主线程中包含宏任务队列和微任务队列,宏任务所在的队列就叫宏任务队列,微任...

  • 宏任务和微任务

    所谓微任务和宏任务 宏任务::常见的定时器,用户交互事件等等。可以理解是每次执行栈执行的代码就是一个宏任务。(宏任...

  • 2018-08-15 微任务 宏任务 MicroTask Mac

    微任务和宏任务 微任务(Microtask)宏任务(Microtask)process.nextTickPromi...

网友评论

      本文标题:2018-06-08 宏任务和微任务

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