对Promise的理解

ops/2024/10/22 16:34:42/

Promise的含义

Promise是ES6引入的JS中进行异步编程的新解决方案。

它是一个对象, 可以获取异步操作的消息, 它的出现大大改善了异步编程的困境, 避免了地狱回调,它比传统的解决方案回调函数和事件更合理和更强大。

Promise的实例有三个状态Pending( 进行中)、Resolved( 已完成)、Rejected( 已拒绝)。

Promise的特点

  • promise 对象代表一个异步操作,对象的状态不受外界影响; 有三种状态, pending( 进行中) 、 Resolved( 已成功) 、 rejected( 已失败) 。
  • 只有异步操作的结果, 可以决定当前是哪一种状态, 任何其他操作都无法改变这个状态, 这也是 promise 这个名字的由来——“ 承诺” ;
  • promise对象的状态改变, 只有两种可能: 从 pending 变为 fulfilled【resolved】, 从pending 变为 rejected并且状态一旦改变,就无法再次改变状态。 这时就称为 resolved(已定型) 。 如果改变已经发生了, 你再对 promise 对象添加回调函数, 也会立即得到这个结果。 这与事件(event) 完全不同, 事件的特点是: 如果你错过了它, 再去监听是得不到结果的。

 Promise的用法

// resolve 解决  函数类型的数据,对象返回成功时使用
// reject  拒绝  函数类型的数据,对象返回失败时使用
const p = new Promise((resolve, reject) => {setTimeout(() => {//30%  1-100  1 2 30//获取从1 - 100的一个随机数let n = rand(1, 100);//判断if(n <= 30){//传值,传到then中resolve(n);     // 将 promise 对象的状态设置为 『成功』}else{reject(n);      // 将 promise 对象的状态设置为 『失败』}}, 1000);
});//then需要接收两个参数,两个参数都是函数类型,第一个函数是对象成功时的回调,第二是失败时的回调
p.then((value) => {         //接收上面异步的值alert('恭喜恭喜, 奖品为 10万 RMB 劳斯莱斯优惠券, 您的中奖数字为 ' + value);}, (reason) => {alert('再接再厉, 您的号码为 ' + reason);});});

 使用 promise 封装 ajax 异步请求

<script >/*可复用的发 ajax 请求的函数: xhr + promise*/
function promiseAjax(url) {return new Promise((resolve, reject) => {const xhr = new XMLHttpRequest()xhr.onreadystatechange = () => {if (xhr.readyState !== 4) returnconst {status,response} = xhr// 请求成功, 调用 resolve(value)if (status >= 200 && status < 300) {resolve(JSON.parse(response))} else { // 请求失败, 调用 reject(reason)reject(new Error('请求失败: status: ' + status))}}xhr.open("GET", url)xhr.send()})
}
promiseAjax('https://www.app.home?code=dsfew').then(data => {console.log('显示成功数据', data)},error => {alert(error.message)}
) 
</script>

此文章借鉴了一下博主的优秀文章万分感谢!

原文链接:https://blog.csdn.net/weixin_44106715/article/details/123934286

原文链接:https://blog.csdn.net/qq_38290251/article/details/107395152


http://www.ppmy.cn/ops/39824.html

相关文章

以Ubuntu 18.04为例,介绍如何通过GUI安装Vmware Tools

正文共&#xff1a;1024 字 15 图&#xff0c;预估阅读时间&#xff1a;1 分钟 我前面已经在我的VMware ESXi主机上装了上百台虚拟机了&#xff0c;系统涉及的面也算得上非常广了&#xff0c;包括Windows系列&#xff08;Windows 7&#xff08;VMware虚拟机部署&#xff08;Win…

下载后端返回的二进制文件

目录 一、问题 二、解决方法 三、总结 tiips:如嫌繁琐&#xff0c;直接移步总结即可&#xff01; 一、问题 1.需要导出功能&#xff0c;后端已经返回了二进制文件&#xff0c;前端如何下载呢&#xff1f; 二、解决方法 1.数据类型转换&#xff1a;将后端的二进制数据转换…

5.神经网络-激活函数

目录 1. 激活函数不是阶跃函数 1.1 激活函数和阶跃函数都是非线性函数 1.2 激活函数不是阶跃函数 2. sigmoid 函数 2.1 sigmoid 函数表达式 2.2 sigmoid 函数 Python 实现 2.4 sigmoid 函数图 3. ReLU 函数 3.1 ReLU 函数表达式 3.2 ReLU 函数 Python 实现 3.4 ReLU…

HDFS HA 修改nameservice

本例中修改将原来的hdfs-ha 修改为 hdfs-ns 停止HDFS, 防止新的业务操作 等待停止结束 KDE中需要调整的配置项如下图所示 a.搜索栏找到fs.defaultFS&#xff0c;将hdfs://hdfs-ha改为hdfs://hdfs-ns b.搜索栏找到dfs.nameservices&#xff0c;将hdfs-ha改为hdfs-ns c.搜索栏找…

什么是IP跳变?

IP 跳跃&#xff08;也称为 IP 跳动&#xff09;的概念已引起使用代理访问网站的用户的极大关注。但 IP 跳跃到底是什么&#xff1f;为什么它对于各种在线活动至关重要&#xff1f; 在本文中&#xff0c;我们将深入探讨 IP 跳跃的世界&#xff0c;探索其实际应用、用例、潜在问…

社交媒体数据恢复:脉脉

在使用社交软件脉脉的过程中&#xff0c;可能会遇到数据丢失的情况&#xff0c;如误删了重要信息或者更换手机后数据未能同步等问题。那么如何恢复脉脉中的数据呢&#xff1f;本文将为您提供详细的步骤指导。 注意&#xff1a;以下操作需要在脉脉账户登录状态下进行。 登录脉…

mysql 启动指定pid 文件位置

MySQL服务启动时&#xff0c;可以指定用于存储进程ID文件的位置。这通常通过在启动服务时使用--pid-file选项来完成。如果你想要改变默认的PID文件位置&#xff0c;可以在my.cnf&#xff08;在Unix系统上通常位于/etc/my.cnf或/etc/mysql/my.cnf&#xff09;或my.ini&#xff0…

2024.04.30校招 实习 内推 面经

绿*泡*泡VX&#xff1a; neituijunsir 交流*裙 &#xff0c;内推/实习/校招汇总表格 1、校招&实习 | 零跑汽车校园招聘 - 三电研发专场&#xff08;内推&#xff09; 校招&实习 | 零跑汽车校园招聘 - 三电研发专场&#xff08;内推&#xff09; 2、校招丨海尔智家2…