Promise 的描述
Promise对象 表示异步操作最终的完成(或者失败)以及其结果的值。
对 Promise 的描述
一个 Promise 是一个代理,代表一个在创建 promise 时不一定已知的值。Promise 允许我们将处理程序与异步操作的最终成功的值或者失败的原因关联起来。使得异步方法可以像同步方法一样返回值:异步方法不会立即返回最终值,而是返回一个 promise,以便在将来的某个时间点提供这个最终值。
一个 Promise 具有几种状态:
- 待定(pending) :初始状态,没有被兑现(fulfilled) 也没有被拒绝(rejected)。
- 已兑现(fulfilled) :操作成功完成。
- 已拒绝(rejected) :操作失败。
一个 Promise 最终状态可以是 fulfilled 并返回一个值,或者是 rejected 并返回一个原因(错误)。这时通过 Promise 的 then 方法串联起来的处理程序将被调用。如果绑定相应的处理程序时 Promise 是 fulfilled 或者 rejected ,处理程序将被立即调用,因此,异步操作完成和绑定处理程序两者之间不存在竟态条件。
如果一个 Promise 是 fulfilled 或者是 rejected ,即不再是 pending 状态,我们称之为 敲定(settled) 。
已解决(resolved) 也是用来描述 Promise 的一个术语,表示该 Promise 是 settled ,或者为了匹配另一个 Promise 的最终状态而被 锁定(lock-in) ,resolved 状态的 Promise 进一步转化为 fulfilled 或者 rejected 都不会有影响。
new Promise((resolveOuter) => {resolveOuter(new Promise((resolveInner) => {setTimeout(resolveInner, 1000);}),);
});
此 Promise 在创建时已经 resolved (因为 resolveOuter 是同步调用的),但它是用另一个 Promise resolve 的,因此在内部 Promise fulfilled 的 1 秒之后才会被兑现。在实践中,“resolve”过程通常是在幕后完成的,不可观察,只有其 fulfilled 或 rejected 是可观察的。