举例:
`async function async1() {
console.log( 'async1 start' )
await async2()
console.log( 'async1 end' )
}
async function async2() {
console.log( 'async2' )
}
console.log( 'script start' )
setTimeout( function () {
console.log( 'setTimeout' )
}, 0 )
async1();
new Promise( function ( resolve ) {
console.log( 'promise1' )
resolve();
} ).then( function () {
console.log( 'promise2' )
} )
console.log( 'script end' )`
代码运行流程(EventLoop) 主程序-->微任务(微任务中类似async 、resolve 代码后面的放入micro队列中) -->宏任务(setTimeout)直接放入macrotask队列中 -->主程序-->微任务-->宏任务
JS代码单线程运行 (ps: 定时器类是宏任务、promis和async是微任务)
- 微任务优先级高于宏任务
- Promise的resolve和reject是异步执行回调,resolve()跟在主函数后
- setTimeout之前调用await执行完后,让出线程。
答案:
"script start" "async1 start" "async2" "promise1" "script end" "async1 end" "promise2" "setTimeout"
事件循环(eventLoop): 同步任务、异步任务
- js单线程
- 同步任务优先于异步任务
- 异步任务: 微任务、宏任务
- 微任务优先于宏任务
区分点:
- 同步任务和异步任务有哪些?
- 微任务和宏任务有哪些?