EventLoop 的简单理解

2020-08-24  本文已影响0人  鲤小鱼爱吃肉

EventLoop是什么

一个循环 每次循环叫tick 每次循环的代码叫task

异步任务的区分

microtasks(微任务):

唯一,整个事件循环中仅存在一个;执行为同步,同一个事件循环中的microtasks会按队列顺序串行执行完毕

macrotask(宏任务):

先执行微任务 再执行宏任务

如果遇到async的代码 await后面的程序就挂起 类似于微任务 等到后面的同步任务执行完了再执行

最后上一个小栗子🌰

(new Promise(resolve => {
  console.log('resolve')
  resolve()
}))
.then(() => console.log('promise then ...'))

async function fun(){
  console.log("fun start")
  const aa = await 1 // 到这里挂起,后面先不执行
  console.log("fun end")
}
fun()

// setTimeout 放入event table中 1秒后将回调函数放入宏任务的event queue中
setTimeout(() => {
  console.log('setTimeout ...')
}, 0)

process.nextTick(() => {
  console.log('nextTick ...')
})

console.log('console ...')


// output
resolve
fun start
console ...
nextTick ...
promise then ...
fun end
setTimeout ...
上一篇 下一篇

猜你喜欢

热点阅读