什么是Promise,Promise的三种状态[通俗易懂]

什么是Promise,Promise的三种状态[通俗易懂]
最新回答
罌粟花开

2021-01-16 02:28:16

Promise是JavaScript中用于处理异步操作的对象,通过封装异步任务并管理其完成或失败的状态及结果值,替代传统的回调函数和事件机制。

Promise的三种状态(通俗解释)
  1. Pending(进行中)

    初始状态,表示异步操作刚开始,还未得出结果(既没成功也没失败)。

    例如:调用new Promise时,内部的异步任务(如网络请求)尚未完成,此时Promise处于Pending。

  2. Resolved(已完成/Fulfilled)

    异步操作成功完成,并返回结果值。

    通过调用resolve(value)触发状态转变,此时Promise会将结果值传递给后续的.then()方法。

    例如:网络请求成功返回数据后,调用resolve(data),Promise状态变为Resolved。

  3. 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)问题。