一篇带你了解promise使用过程中会存在什么状态

promise(承诺)的状态

  • Pending(待定):初始状态,表示promise正在执行中,也可能是等待中。
javascript 复制代码
const promise = new Promise((resolve, reject) => {
  // 异步操作
  setTimeout(() => {
    const success = true; // 模拟异步操作成功的条件
    if (success) {
      resolve("操作成功");
    } else {
      reject("操作失败");
    }
  }, 2000); // 假设异步操作需要2秒钟完成
});
console.log(promise);

浏览器执行结果:

  • Fulfilled(已完成):表示promise已成功完成操作,且返回了一个值。
javascript 复制代码
const promise = new Promise((resolve, reject) => {
  // 异步操作
  // 这里可以是一段耗时的异步代码

  resolve("操作成功");
});
promise.then((result) => {
  console.log(result); // 输出:"操作成功"
}).catch((error) => {
  console.error(error);
});

浏览器执行结果:

  • Rejected(已拒绝):表示promise未能成功完成操作,出现了错误或异常情况。 这些状态描述了promise在执行过程中可能经历的不同阶段,帮助开发人员更好地处理异步操作和结果处理。
javascript 复制代码
const promise = new Promise((resolve, reject) => {
  // 异步操作
  // 这里可以是一段耗时的异步代码

  reject("操作失败");
});

promise.then((result) => {
  console.log(result);
}).catch((error) => {
  console.error(error); // 输出:"操作失败"
});

浏览器执行结果:

了解这些状态有什么作用?

  1. Pending(待定)状态 :在 Promise 对象刚被创建时,其状态为 pending。此时可以调用 .then() 方法来注册一个成功回调函数,以及 .catch() 方法来注册一个失败回调函数,用于处理异步操作的成功和失败情况。
  2. Fulfilled(已完成)状态 :当 Promise 对象的异步操作成功完成时,其状态会变为 fulfilled。此时可以调用 .then() 方法来注册一个成功回调函数,用于处理异步操作成功的情况。
  3. Rejected(已失败)状态 :当 Promise 对象的异步操作失败时,其状态会变为 rejected。此时可以调用 .catch() 方法来注册一个失败回调函数,用于处理异步操作失败的情况。

所以熟练掌握并迅速了解当前代码下promise处于什么状态,有助于我们快速解决异步操作不同情况下的问题。

总结:

在使用 Promise 过程中,主要存在三种状态:Pending(待定)、Fulfilled(已完成)和 Rejected(已失败)。当 Promise 对象刚被创建时,处于待定状态;异步操作成功完成时,进入已完成状态;异步操作失败时,进入已失败状态。通过这些状态变化,我们可以清晰地了解异步操作的执行情况,并在合适的时机进行处理。在编写异步代码时,合理处理这些状态变化是保证程序健壮性和可靠性的关键。

总之,Promise 的状态变化体现了异步操作的承诺和执行过程,通过合理处理不同状态,我们可以实现更可靠的异步编程。如果本文对你有所帮助,还望点个赞支持一下,感谢大家。

相关推荐
腻害兔10 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:CRM 客户关系模块深度解析——从线索到回款,一套完整的 B2B 销售闭环是怎么搭的?
java·前端·javascript·vue.js·产品经理·ai编程
whyfail10 小时前
前端学 Spring Boot(2):一次点击,如何穿过整个后端?
前端·spring boot·后端
AI多Agent协作实战派11 小时前
AI多Agent协作系统实战(二十三):Agent读HEARTBEAT.md不读AGENTS.md——openclaw的文件加载之谜
前端·数据库·人工智能·uni-app
gis开发之家11 小时前
《Vue3 从入门到大神37篇》Vue3 源码详解(七):watch 与 watchEffect 源码对比——副作用是如何被追踪的?
javascript·前端框架·vue3·vue3源码
2601_9557600712 小时前
如何用 Claude Opus 5 API 批量扩展长尾关键词和文章选题
前端·python·搜索引擎
KaMeidebaby12 小时前
卡梅德生物技术快报|bli亲和力检测gst:告别批量跑胶:BLI实时酶切监测技术加速GST融合蛋白下游流程优化
前端·网络·数据库·人工智能·算法
bloglin9999912 小时前
langchain 和 langgraph 和 react
javascript·react.js·langchain
触底反弹12 小时前
🚀 删了数据刷新又回来?3 组件 × 4 回调 × 3 坑讲透 React 父子通信
前端·javascript·react.js
耳东小鹿13 小时前
对象常用方法
前端
程序员海军13 小时前
一个 AI 应用开发程序员的一天,都在屏幕前忙些什么?
前端·后端·程序员