Open super-fool opened 3 years ago
每一个异步任务都包含一个或多个回调函数(callback), 并且会有一个异步队列存储所有的异步任务.
属于浏览器的异步任务: setTimeout, setInterval, AJAX, I/O
setTimeout
setInterval
AJAX
I/O
JS主线程也属于宏任务
属于JS的异步任务: Promise, async/await,process.nextTick
Promise
async/await
process.nextTick
同步任务 > 微任务 > 宏任务
console.log(1); setTimeout(()=>console.log(2), 0); setTimeout(()=>{ Promise.resolve().then(()=>console.log(3)); } , 0); setTimeout(()=>console.log(4), 2000); new Promise(resolve=>{ console.log(5); resolve(); } ).then(()=>console.log(6)); console.log(7); // 1, 5, 7, 6, undefined, 2, 3, 4
参考: https://zhuanlan.zhihu.com/p/257069622
异步任务
每一个异步任务都包含一个或多个回调函数(callback), 并且会有一个异步队列存储所有的异步任务.
宏任务
属于浏览器的异步任务:
setTimeout
,setInterval
,AJAX
,I/O
微任务
属于JS的异步任务:
Promise
,async/await
,process.nextTick
任务顺序
同步任务 > 微任务 > 宏任务