当前位置: 首页 > news >正文

Promise的三种状态

目录

代码示例

HTML + JavaScript 代码:

代码解释

总结


在 JavaScript 中,Promise 是一种异步编程的解决方案,它用于表示异步操作的最终完成(或失败)及其结果值。Promise 主要有三种状态:

  1. Pending(待定): 初始状态,异步操作还未完成。
  2. Fulfilled(已兑现): 异步操作成功完成。
  3. Rejected(已拒绝): 异步操作失败。

理解这些状态对于正确使用 Promise 非常重要。在这篇文章中,我们将通过代码来演示 Promise 的状态转换及其使用方法。

代码示例

HTML + JavaScript 代码:
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Promise的三种状态</title> 
</head>

<body>
  <script>
    // 创建一个Promise实例
    const p = new Promise((resolve, reject) => {

      console.log('Promise对象在内部运行中');

      // 使用setTimeout模拟异步操作,例如AJAX请求
      setTimeout(() => {
        // resolve('模拟AJAX请求-成功'); // 如果请求成功,调用resolve,并传递成功的结果
        reject(new Error('模拟AJAX请求-失败')); // 如果请求失败,调用reject,并传递一个错误对象
      }, 5000); // 设置延迟时间为5000毫秒(5秒)
    });
    console.log(p);

    // 使用then方法处理Promise成功的情况
    p.then(result => {
      console.log(result); // 如果Promise成功,result会接收到resolve传递的值,并在这里打印
    });

    // 使用catch方法处理Promise失败的情况
    p.catch(error => {
      console.log(error); // 如果Promise失败,error会接收到reject传递的值,并在这里打印
    });
  </script>
</body>

</html>

代码解释

  1. 创建 Promise 实例

    • 通过 new Promise() 创建一个 Promise 实例,该实例包含两个参数:resolvereject。这两个参数分别代表操作成功时的回调和操作失败时的回调。
  2. 模拟异步操作

    • 使用 setTimeout 模拟一个异步操作(比如 AJAX 请求)。这个操作将在 5 秒后完成。通过 resolve() 方法模拟请求成功,通过 reject() 方法模拟请求失败。
  3. 状态的变化

    • 初始时,Promise 处于 "Pending"(待定)状态。
    • 如果异步操作成功,resolve() 被调用,Promise 转为 "Fulfilled"(已兑现)状态。
    • 如果异步操作失败,reject() 被调用,Promise 转为 "Rejected"(已拒绝)状态。
  4. 处理结果

    • .then() 用于处理 Promise 成功的情况。它接收 resolve() 返回的值并进行处理。
    • .catch() 用于处理 Promise 失败的情况。它接收 reject() 返回的错误对象并进行处理。
  5. 执行流程

    • 页面加载时,Promise 被创建并打印在控制台中。由于我们模拟了请求失败,5 秒后 reject() 被调用,catch() 中的回调函数会被执行,输出错误信息。

总结

通过这个示例,我们可以清楚地看到 Promise 的三种状态以及如何使用 resolve()reject() 来控制 Promise 的状态转换。通过 .then().catch() 方法,我们可以处理异步操作的结果,不管是成功还是失败。这使得异步编程更加清晰和可控。

相关文章:

  • 企业数据安全:切实有效的数据安全保障措施分享:
  • deep seek
  • OpenAI 放王炸,将发布整合多项技术的 GPT-5,并免费无限使用,该模型有哪些技术亮点
  • JAVA学习-练习试用Java实现“结合Apache Nifi对大数据流进行自动化处理和筛查”
  • DeepSeek大模型响应速度优化策略
  • Spring Boot全局异常处理终极指南:从青铜到王者的实战演进
  • 47 AVL树的实现
  • 【C】初阶数据结构4 -- 双向循环链表
  • 深入 Java:从基础到实战的文件处理技巧
  • 知识图谱数据库 Neo4j in Docker笔记
  • 2025最新深度学习pytorch完整配置:conda/jupyter/vscode
  • 咸鱼换绑手机号能换ip属地吗?深入探讨
  • 深度学习-114-大语言模型应用之提示词指南实例DeepSeek使用手册(三)
  • 【linux】在 Linux 上部署 DeepSeek-r1:32/70b:解决下载中断问题
  • Spring 框架数据库操作常见问题深度剖析与解决方案
  • 微服技术栈之Spring could gateway
  • 【后端面试总结】什么是堆,什么是栈
  • Open3D C++系列教程 (七)继承窗口类
  • 什么是 大语言模型中Kernel优化
  • 【第5章:深度生成模型— 5.1 变分自编码器(VAE)与生成对抗网络(GAN)的基础理论】
  • 做企业网站有什么工作内容/如何让自己的网站被百度收录
  • 网站建设推广公司哪家权威/如何通过网络营销自己
  • 网站留言系统编写代码/百度推广客户端下载安装
  • 做网站可以赚钱吗/十堰seo排名公司
  • 医院加强网站建设/网页优化包括
  • 网站建设排行/百度搜索资源平台token