事件循环中分为宏任务队列和微任务队列
宏任务(macrotask):在新标准中叫 task
主要包括:script(整体代码),setTimeout,setInterval,setImmediate,I/O,ui rendering
微任务(microtask):在新标准中叫 jobs
主要包括:process.nextTick, Promise,MutationObserver(html5 新特性)
setTimeout、Promise、Async/Await 的区别
setTimeout 的回调函数放到宏任务队列里,等到执行栈清空以后执行
Promise.then 里的回调函数会放到相应宏任务的微任务队列里,等宏任务里面的同步代码执
行完再执行
async 函数表示函数里面可能会有异步方法,await 后面跟一个表达式
async 方法执行时,遇到 await 会立即执行表达式,然后把表达式后面的代码放到微任务队
列里,让出执行栈让同步代码先执行