Promise是JavaScript中用于处理异步操作的对象,通过封装异步任务并管理其完成或失败的状态及结果值,替代传统的回调函数和事件机制。
Promise的三种状态(通俗解释)Pending(进行中)
初始状态,表示异步操作刚开始,还未得出结果(既没成功也没失败)。
例如:调用new Promise时,内部的异步任务(如网络请求)尚未完成,此时Promise处于Pending。
Resolved(已完成/Fulfilled)
异步操作成功完成,并返回结果值。
通过调用resolve(value)触发状态转变,此时Promise会将结果值传递给后续的.then()方法。
例如:网络请求成功返回数据后,调用resolve(data),Promise状态变为Resolved。
Rejected(已失败)
异步操作失败,并返回错误信息。
通过调用reject(error)触发状态转变,此时Promise会将错误信息传递给后续的.catch()方法。
例如:网络请求超时或服务器错误时,调用reject(error),Promise状态变为Rejected。
关键特性- 状态不可逆:一旦从Pending变为Resolved或Rejected,状态和结果值将固定,无法再次修改。
- 链式调用:通过.then()和.catch()方法返回新的Promise对象,支持连续处理异步结果或错误。
- 异步处理:executor函数(构造Promise时传入的函数)会立即执行,但内部的异步操作(如定时器、请求)完成后才触发状态变更。
示例代码new Promise((resolve, reject) => { // 模拟异步操作(如网络请求) setTimeout(() => { const success = Math.random() > 0.5; // 随机成功或失败 if (success) { resolve("操作成功!"); // 转为Resolved状态 } else { reject("操作失败!"); // 转为Rejected状态 } }, 1000);}).then(result => console.log(result)) // 处理Resolved状态.catch(error => console.error(error)); // 处理Rejected状态总结- Pending:任务刚开始,结果未知。
- Resolved:任务成功,结果可用。
- Rejected:任务失败,错误需处理。Promise通过明确的状态管理,使异步代码更易读、易维护,避免了回调地狱(Callback Hell)问题。