一、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状态分为三种:pending、resolved、rejected。状态一旦发生变化,不会再变。
创建新promise实例时,传入的 executor函数参数
1、接受两个函数,
(1)一个是将promise状态变为fulfilled的resolve,如果resolve接受的参数是另一个promise实例,那么该promise实例的状态会由另一个promise实例的状态改变决定。
(2)一个是将promise实例状态变为rejected的reject。
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决定。