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() 方法,我们可以处理异步操作的结果,不管是成功还是失败。这使得异步编程更加清晰和可控。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/71047.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排序之选择排序(C# C++)

目录 1 选择排序 2 排序原理 3 排序步骤 4 代码示例 4-1 C#代码示例 4-2 C代码示例 1 选择排序 选择排序&#xff08;Selection Sort&#xff09;是一种简单直观的排序算法&#xff0c;它的基本思想是每一轮从待排序的数据元素中选出最小&#xff08;或最大&#xff09…

达梦 跟踪日志诊断

目录标题 参考连接**性能诊断&#xff1a;跟踪日志诊断****总结** 参考连接 性能诊断 -> 跟踪日志诊断 性能诊断&#xff1a;跟踪日志诊断 备份现有的日志配置文件 在修改文件之前&#xff0c;建议先备份原始文件&#xff0c;以防万一需要恢复。 cp /opt/dmdbms/dmdata/DA…

nodejs版本管理,使用 nvm 删除node版本,要删除 Node.js 的某个版本详细操作

要删除 Node.js 的某个版本并保持 Node Version Manager (nvm) 的管理整洁&#xff0c;可以按以下步骤操作&#xff1a; 步骤 1&#xff1a;查看已安装的 Node.js 版本 nvm ls这会列出你通过 nvm 安装的所有 Node.js 版本。输出类似于&#xff1a; -> v18.17.1v16.20…

算法与数据结构(多数元素)

题目 思路 方法一&#xff1a;哈希表 因为要求出现次数最多的元素&#xff0c;所以我们可以使用哈希映射存储每个元素及其出现的次数。每次记录出现的次数若比最大次数大&#xff0c;则替换。 方法二&#xff1a;摩尔算法 摩尔的核心算法就是对抗&#xff0c;因为存在次数多…

《open3d qt 网格采样成点云》

open3d qt 网格采样成点云 效果展示二、流程三、代码效果展示 二、流程 创建动作,链接到槽函数,并把动作放置菜单栏 参照前文 三、代码 1、槽函数实现 void on_actionMeshUniformSample_triggered();//均匀采样 void MainWindow::

windows平台上 oracle简单操作手册

一 环境描述 Oracle 11g单机环境 二 基本操作 2.1 数据库的启动与停止 启动: C:\Users\Administrator>sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on 星期五 7月 31 12:19:51 2020 Copyright (c) 1982, 2013, Oracle. All rights reserved. 连接到:…

mybatis mapper java.uti.Date 与 jdbcType.TIMESTAMP相差8小时

Java实体类 给类型是 Date mybatis中配置的 jdbcType“TIMESTAMP” 最后通过mapper查询出的数据&#xff0c;比数据库中一直少8个小时。网上查询以及深度学习 问答系统&#xff0c;都说是时区问题导致的。 检查了数据库连接字符串 已经添加了 asia/shanghai 采用select sysdat…

【SpringBoot3.x+】slf4j-log4j12依赖引入打印日志报错的两种解决方法

最开始引入了1.7.5版本的slf4j-log4j依赖包&#xff0c;但是控制台不报错也不显示日志 在https://mvnrepository.com/找到最新的2.0.16版本之后出现报错&#xff1a; 进入提示的slf4j网站中可以找到从2.0.0版本开始&#xff0c;slf4j-log4j已经被slf4j-reload4j取代&#xff1…

C语言交换排序之快速排序

文章目录 概要代码输出分析优缺点 概要 快速排序&#xff08;Quick Sort&#xff09;&#xff1a; 是一种非常高效的排序算法&#xff0c;基于分治法&#xff08;Divide and Conquer&#xff09;的思想。它的基本思想是通过一个"基准"元素&#xff08;pivot&#xf…

SpringMVC请求执行流程源码解析

文章目录 0.SpringMVC九大内置组件1.processRequest方法1.请求先到service方法2.然后不管是get还是post都会跳转到processRequest方法统一处理 2.doService方法3.doDispatch方法1.代码2.checkMultipart 4.核心流程 0.SpringMVC九大内置组件 1.processRequest方法 1.请求先到se…

深度学习项目--基于RNN的阿尔茨海默病诊断研究(pytorch实现)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 其实这个项目比较适合机器学习做&#xff0c;用XGBoost会更好&#xff0c;这个项目更适合RNN学习案例&#xff0c;测试集准确率达到百分之84.2&#xf…

华宇TAS应用中间件与因朵科技多款产品完成兼容互认证

在数字化浪潮澎湃向前的当下&#xff0c;信息技术的深度融合与协同发展成为推动各行业创新变革的关键力量。近日&#xff0c;华宇TAS应用中间件携手河北因朵科技有限公司&#xff0c;完成了多项核心产品的兼容互认证。 此次兼容性测试的良好表现&#xff0c;为双方的进一步深入…

麒麟操作系统-MySQL5.7.36二进制安装

1、创建MySQL虚拟用户 groupadd mysql useradd -g mysql -s /sbin/nologin -M mysql 2、创建目录 mkdir -p /data/file #创建文件目录 mkdir -p /opt/mysql #创建MySQL安装目录 mkdir -p /data/mysql/mysql3306/{data,logs} #创建MySQL数据及日志目录 3、安装MySQL5.7.36 …

算法学习笔记之贪心算法

导引&#xff08;硕鼠的交易&#xff09; 硕鼠准备了M磅猫粮与看守仓库的猫交易奶酪。 仓库有N个房间&#xff0c;第i个房间有 J[i] 磅奶酪并需要 F[i] 磅猫粮交换&#xff0c;硕鼠可以按比例来交换&#xff0c;不必交换所有的奶酪 计算硕鼠最多能得到多少磅奶酪。 输入M和…

Xcode证书密钥导入

证书干嘛用 渠道定期会给xcode证书&#xff0c;用来给ios打包用&#xff0c;证书里面有记录哪些设备可以打包进去。 怎么换证书 先更新密钥 在钥匙串访问中&#xff0c;选择系统。(选登录也行&#xff0c;反正两个都要导入就是了)。 mac中双击所有 .p12 后缀的密钥&#xff…

使用 Elastic APM 监控你的 C++ 应用程序

作者&#xff1a;来自 Elastic Haidar Braimaanie 在本文中&#xff0c;我们将使用 Opentelemetry CPP 客户端来监控 Elastic APM 中的 C 应用程序。 介绍 开发人员、SRE 和 DevOps 专业人员面临的主要挑战之一是缺乏能够为他们提供应用程序堆栈可见性的综合工具。市场上的许多…

前端骨架怎样实现

前端骨架屏&#xff08;Skeleton Screen&#xff09;是一种优化页面加载体验的技术&#xff0c;通常在内容加载时展示一个简易的占位符&#xff0c;避免用户看到空白页面。骨架屏通过展示页面结构的骨架样式&#xff0c;让用户有页面正在加载的感觉&#xff0c;而不是等待内容加…

团结引擎 Shader Graph:解锁图形创作新高度

Shader Graph 始终致力于为开发者提供直观且高效的着色器构建工具&#xff0c;持续推动图形渲染创作的创新与便捷。在团结引擎1.4.0中&#xff0c;Shader Graph 迎来了重大更新&#xff0c;新增多项强大功能并优化操作体验&#xff0c;助力开发者更轻松地实现高质量的渲染效果与…

微信小程序地图标记点,安卓手机一次性渲染不出来的问题

问题描述&#xff1a; 如果微信小程序端&#xff0c;渲染的标记物太多&#xff0c;安卓手机存在标记物不显示的问题&#xff0c;原因初步判断是地图还没有渲染完&#xff0c;标记物数据已经加载完了&#xff0c;导致没有在地图上显示。 解决办法&#xff1a; 使用map组件的b…

AI前端开发的崛起与ScriptEcho的助力

近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术飞速发展&#xff0c;深刻地改变着软件开发的格局。尤其是在前端开发领域&#xff0c;AI的应用越来越广泛&#xff0c;催生了对AI写代码工具的需求激增&#xff0c;也显著提升了相关人才的市场价值。然而&#xff0c;…