在 JavaScript 中,Promise
是一种表示异步操作最终完成(或失败)及其结果的对象。它有三种状态,分别是:等待态(Pending)、成功态(Fulfilled) 和 失败态(Rejected)。这三种状态之间有着明确的转换规则,本篇文章将为你详细解析。
一、Promise 的三种状态
1. 等待态(Pending)
- 定义:这是 Promise 的初始状态,表示异步操作尚未完成。
- 特点:在此状态下,无法确定最终的结果是成功还是失败。
- 示例:当创建一个 Promise 对象时,它处于等待态,直到异步操作完成。
2. 成功态(Fulfilled)
- 定义:表示异步操作已经成功完成,并且结果是成功的。
- 特点:可以通过
.then()
方法获取成功的值。 - 示例:例如,网络请求成功返回数据。
3. 失败态(Rejected)
定义:表示异步操作失败,并且提供了失败的原因。
特点:可以通过 .catch() 方法捕获失败的错误信息。
示例:例如,网络请求失败或数据格式不正确。
二、状态变化规则
Promise 的状态变化遵循以下规则:
- 从等待态到成功态或失败态:当异步操作完成时,Promise 的状态会从等待态变为成功态或失败态。
- 不可逆性:一旦 Promise 的状态变为成功态或失败态,就无法再改变。这意味着状态的变化是单向的。
- 一旦状态改变,将保持不变:无论后续发生什么,Promise 的状态不会再次改变。
三、状态变化的触发方式
1. 手动触发
- 在创建 Promise 时,可以通过调用
resolve
或reject
方法来手动触发状态变化。
const promise = new Promise((resolve, reject) => {
// 模拟异步操作
setTimeout(() => {
const isSuccess = Math.random() > 0.5;