一、event loop
    event loop有什么作用?
    异步任务是通过回调函数来实现的。event loop机制是回调函数的实现原理
    1、event loop实现异步回调
    js代码执行机制:
    (1)、同步代码会一行一行放进call stack执行
    (2)、遇到异步任务(定时任务和网络请求等),记录下来,等待时机
    (3)、时机一到将回调函数放入callback queue中
    (4)、当call stack中任务执行完event loop开始工作
    (5)、轮询查找callback queue中有无回调函数,如果有则移动到call stack中执行
    2、event loop实现dom事件回调
    dom事件不属于异步,回调函数放入callback queue时机是用户交互时发生。

    异步回调和dom事件回调触发时机不一样。

    二、promise
    promise状态分为三种:pendingresolvedrejected。状态一旦发生变化,不会再变。
    创建新promise实例时,传入的 executor函数参数
    1、接受两个函数
    (1)一个是将promise状态变为fulfilledresolve,如果resolve接受的参数是另一个promise实例,那么该promise实例的状态会由另一个promise实例的状态改变决定。
    (2)一个是将promise实例状态变为rejectedreject
    2、如果executor抛出异常或者在执行过程中报错,那么promise的状态会变为rejected,reason值为异常对象。
    3、promise状态改变后,会根据状态来调用then和catch方法。
    (1)then方法中接受两个参数,一个是onFulfilled函数,一个是onRejected函数。分别在promise状态为fulfilled时和rejected时调用,会返回另一个新的promise实例
    (2)catch方法在promise状态变为rejected时调用,另外还可以捕获往后‘冒泡’的异常

    4、then和catch的返回值决定新promise实例的状态
    (1)产生异常时,新promise实例状态为rejected
    (2)无返回值,新promise实例状态为fulfilled,value为undefined
    (3)返回值普通值时,状态为fulfilled
    (4)返回另一个promise时,新promise实例的状态由该返回的promise决定。