Promise是异步操作,内置三种状态pendding,fulfilled,rejected三种状态,初始状态是pendding,且只能从pendding转化为fulfilled或者rejected,
并且状态不可逆转。promise拥有成功执行队列(fulfilledQueue)和失败执行队列(rejectedQueue)。
初始化一个promiss接收一个函数为参数该,该函数有两个参数,分别处理成功状态(resolve)和失败状态(reject)。
1.成功,调用resolve并更改状态为fulfilled
(1)(resolve(val))返回的参数(val)不是promise则调用成功执行队列的函数(fulfilledQueue)并清空
(2)(resolve(val))返回的参数(val)是promise则调用该promise.then方法处理,当前状态改变在参数promise之后且状态取决于参数Promise的状态
2.失败,调用reject并更改状态为rejected
调用失败执行队列的函数(rejectedQueue)并清空
promise.then
接收两个参数(成功处理函数resolve和失败处理函数reject),返回一个promise,promise执行中判断当前状态:
pendding: 将resolve和reject处理函数分别放入fulfilledQueue和rejectedQueu
fulfilled:执行resolve(val),如果resolve(val)的返回值是promise,则执行resolve(val).then等待其状态改变后执行下一个回调
如果resolve(val)的返回值不是promise,则返回值作为参数直接传入下一个then方法中并立即执行then
rejected:执行reject(val),如果reject(val)的返回值是promise,则执行reject(val).then等待其状态改变后执行下一个回调
如果resolve(val)的返回值不是promise,则返回值作为参数直接传入下一个then方法并立即执行then