信息发布→ 登录 注册 退出

javascript Promise是什么_如何使用then和catch处理结果

发布时间:2025-12-29

点击量:
Promise是JavaScript中处理异步操作的对象,解决回调地狱问题;有pending、fulfilled、rejected三种不可逆状态;通过new Promise()创建,用then()处理成功、catch()捕获错误,支持链式调用。

Promise 是 JavaScript 中用于处理异步操作的对象,它代表一个尚未完成、但未来可能会完成(或失败)的操作的结果。 它解决了传统回调函数嵌套过深(“回调地狱”)的问题,让异步代码更清晰、更易维护。

Promise 的三种状态

每个 Promise 实例始终处于以下其中一种状态:

  • pending(进行中):初始状态,既未成功也未失败
  • fulfilled(已成功):操作成功完成,此时可调用 then() 获取结果
  • rejected(已失败):操作出错,此时可调用 catch() 捕获错误

状态一旦改变(pending → fulfilled 或 pending → rejected),就不可逆,也不会再变。

如何创建和使用 Promise

new Promise() 构造函数创建,它接收一个执行器函数(executor),该函数立即执行,并传入两个参数:resolve(成功时调用)和 reject(失败时调用):

const myPromise = new Promise((resolve, reject) => {
  // 模拟异步操作,比如网络请求或定时任务
  setTimeout(() => {
    const success = Math.random() > 0.3;
    if (success) {
      resolve("操作成功!"); // 触发 fulfilled 状态
    } else {
      reject(new Error("操作失败")); // 触发 rejected 状态
    }
  }, 1000);
});

用 then() 处理成功结果

then() 接收两个可选参数:第一个是成功时的回调(接收 resolve 的值),第二个是失败时的回调(等价于 catch,但不推荐混用):

  • 推荐写法:只传一个成功回调,错误统一交给 catch()
  • then() 返回一个新的 Promise,支持链式调用(可继续 then()catch()
  • 如果在 then() 回调中返回值(非 Promise),会自动包装成 resolved Promise;若返回 Promise,则等待其结果
myPromise
  .then(result => {
    console.log(result); // "操作成功!"
    return result + " —— 并继续处理";
  })
  .then(newResult => {
    console.log(newResult); // "操作成功! —— 并继续处理"
  });

用 catch() 捕获和处理错误

catch() 专门用于捕获 Promise 链中任意环节抛出的错误(包括 reject() 和同步异常):

  • 它等价于 then(null, rejectionHandler)
  • 放在链末尾可集中处理前面所有可能的错误
  • 如果 catch() 中没有重新抛出错误,后续 then() 仍会执行(因为 catch 自身返回的是 resolved Promise)
myPromise
  .then(result => {
    console.log(result);
    throw new Error("手动抛错"); // 这里出错会被 catch 捕获
  })
  .catch(err => {
    console.error("错误:", err.message); // "错误: 手动抛错"
  });
标签:# javascript  # java  # 回调函数  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!