setTimeout、Promise、Async/Await 的区别

108 阅读1分钟

事件循环中分为宏任务队列和微任务队列

宏任务(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 会立即执行表达式,然后把表达式后面的代码放到微任务队列里,让出执行栈让同步代码先执行