1.promise的定义
promise对象用于表示一个异步操作的最终完成或失败及其结果值,它能把异步操作最终的成功返回值或者失败原因和相应的处理程序关联起来。
2.期约是一个有状态的对象,可能处于以下三种状态
(1)待定(pending
): 表示尚未开始或者正在执行中。
(2)兑现(fulfilled
,有时候也称为“解决”,resolved
): 表示已经成功完成。
(3)拒绝(rejected
): 则表示没有成功完成,也就是已经失败。
待定(pending)是期约的最初始的状态,在待定状态下,期约是可以落定(settled)为代表成功的兑现(fulfiled),或者代表失败的拒绝(rejected)状态。无论落定为哪种状态都是不可逆的。只要从待定状态转为为兑定或者拒绝,期约的状态就不在改变。每个期约只要状态切换为兑现(fulfilled),就会有一个私有的内部值(value)。类似地,每个期约只要状态切换为拒绝(rejected),就会有一个私有的内部理由(reason)。无论是值还是理由,都是包含原始值或对象的不可修改的引用。二者都是可选的,而且默认值为undefined。在期约到达某个落定(settled)状态时执行的异步代码始终会收到这个值(value)或理由(reason)。
3.Promise通过执行器函数控制期约的状态
由于期约的状态是私有的,所以只能在内部进行操作。内部操作在期约的执行器函数中完成。执行器函数主要有两项职责:初始化期约的异步行为和控制状态的最终转换。其中,控制期约状态的转换是通过调用它的两个函数参数实现的。这两个参数通常命名为resolve和reject。调用resolve()