宏任务(macrotask)
谁发起的宿主(Node、浏览器)
具体事件
- script (可以理解为外层同步代码)
- setTimeout/setInterval
- UI rendering/UI事件
- postMessage,MessageChannel
- setImmediate,I/O(Node.js)
——————————————
微任务(microtask)
谁发起的宿主 JS引擎
具体事件
1.Promise
2.MutaionObserver
3.Object.observe(已废弃;Proxy 对象替代)
4.process.nextTick(Node.js)(在同步任务执行完毕后立即执行,第一个微任务)
浏览器环境中的微任务有:
Promise.prototype.then、
Promise.prototype.catch、
Promise.prototype.finally、
MutationObserver
NodeJS 环境中的微任务有:
Promise.prototype.then、
Promise.prototype.catch、
Promise.prototype.finally、
process.nextTick
——————————————————
事件执行顺序一、同步任务
二、process.nextTick
三、微任务
四、宏任务
五、setImmediate
——————————————————
promise.then()语句相当于先执行promise再执行.then
(async默认为执行new promise())
将async函数赋值也属于执行aync
async/await 本质上依然是基于Promise,但在使用上更加简便符合自然习惯。
async函数内部同步执行。await之间相当于.then。