js事件循环

  • 微任务:Promise,async/await,process.nextTick
  • dom
  • 宏任务:包括整体代码script,setTimeout,setInterval
微任务、宏任务会进入到不同的event queue。比如setTimeout和setInterval会进入相同的Event Queue。
在一个event loop,先执行微任务的queue,在执行dom,最后宏任务的queue
遇到 console 立即执行
首先会遇到setTimeout,将其放到宏任务event queue里面
然后回到 promise , new promise 会立即执行, then会分发到微任务
console.log("1") setTimeout(()=>{ console.log("2") }) new Promise((resolve) => { resolve() console.log("3") }).then(()=>{ console.log("4") }).finally(()=>{ console.log("5") }) console.log("6")

输出
1 3 6 4 5(dom)2
第二个例子
console.log(1); setTimeout(() => { console.log(2); Promise.resolve().then(() => { console.log(3) }); }); new Promise((resolve, reject) => { console.log(4) resolve(5) }).then((data) => { console.log(data); }).then((data) => { console.log('another'); }) setTimeout(() => { console.log(6); }) console.log(7);

【js事件循环】输出:
1 4 7 5 another (dom) 2 3 6

    推荐阅读