Event Loop 个人笔记

157 阅读1分钟

举例:

`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是微任务)

  1. 微任务优先级高于宏任务
  2. Promise的resolve和reject是异步执行回调,resolve()跟在主函数后
  3. setTimeout之前调用await执行完后,让出线程。

答案:

"script start" "async1 start" "async2" "promise1" "script end" "async1 end" "promise2" "setTimeout"

事件循环(eventLoop): 同步任务、异步任务

  1. js单线程
  2. 同步任务优先于异步任务
  3. 异步任务: 微任务、宏任务
  4. 微任务优先于宏任务

区分点:

  1. 同步任务和异步任务有哪些?
  2. 微任务和宏任务有哪些?