eventloop

145 阅读1分钟

js是单线程语言,实现多线程和异步需要eventloop实现,在一次事件循环中,js会先执行同步代码,即主任务,然后去查找是否有微任务主要是promise的回调函数,如果有就优先执行微任务,然后去查找宏任务(setTimeout)进行执行。

注意:

  • promise实例new Promise是同步操作,promise的回调函数.then()是异步操作
  • 在函数名前加上async关键字,表示这个函数内部有异步操作但是和普通函数的区别知识返回的是promise对象 return 一个promise.resolve();
  • 当遇到await时,会阻塞函数内部处于它后面的代码,把后面的代码放到微任务队列中,去执行该函数外部的同步代码,当外部同步代码执行完之后,会回到该函数内部执行剩余的代码,当await执行完毕之后,处理微任务队列的代码,清空微任务队列的代码会按照先后顺序比如 a任务,b任务,清空顺序也为a任务,b任务。

例题1

结果

  • script start
  • async1 start
  • async2
  • promise1
  • promise2
  • script end
  • nextTick
  • async1 end
  • promise3
  • setTimeout0
  • setImmediate
  • setTimeout3

例题2

结果

  • 2222
  • 5555
  • 11111
  • 33333
  • 6666
  • 7777
  • 44444