例子
async function test1() { console.log("test1 begin") const result = await test2() setTimeout(() => { console.log(‘timeOut2‘) }, 0) console.log("test1 end") } async function test2() { console.log("test2") } console.log("script begin") test1() setTimeout(() => { console.log(‘timeOut1‘) }, 0) new Promise(resolve=>{ console.log(‘Promise‘) resolve() }).then( setTimeout(() => { console.log(‘timeOut3‘) }, 0) ).then(()=>{ console.log(‘resolve‘) }) console.log("script end")
分析:
1. 首先执行主线程的同步代码 ‘script begin ‘ 然后执行 test1()
--结果: script begin
2. test1 执行 ‘test1 begin‘ 遇到 await 先执行 ‘test2‘ 执行完毕后等待 等后续都执行完再继续执行后续
--结果: script begin => test1 begin => test2
3. 由于等待 跳出test1() 宏队列中放入 timeOut1 遇到Promise 直接执行 ‘Promise‘ 后面的.then是异步任务 放入微队列 timeOut3放入宏
--结果: script begin => test1 begin => test2 => Promise
4. 继续向下执行 promise后面 执行 ‘script end‘ 然后就全部执行完毕了 回到 await test2() 宏队列中放入 timeOut2 执行 ‘test1 end‘
--结果: script begin => test1 begin => test2 => Promise => ‘script end‘ => ‘test1 end‘
5. 然后执行微队列 ‘resolve‘ 然后执行宏队列 timeOut1 timeOut3 timeOut2
--结果: script begin => test1 begin => test2 => Promise => ‘script end‘ => ‘test1 end‘ => ‘resolve‘ => ‘timeOut1‘ => ‘timeOut3‘ => ‘timeOut2‘
个人学习 不对之处欢迎指正
原文:https://www.cnblogs.com/shirunfeng/p/14825818.html