对Promise的理解

devtools/2024/9/23 20:13:35/

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/devtools/39644.html

相关文章

iOS git创建与合并分支

参考文章 Git – 创建与合并分支 相关命令行解释 1. 创建并切换到该分支&#xff1a; 2.0.0是新建的分支的名字 git checkout -b 2.0.0 相当于下面这两句 创建分支 git branch 2.0.0 切换到某个分支 git checkout 2.0.0 2. 查看当前所有分支&#xff1a; git branch 如何提…

免费获取!图论+灰色系统+混合优化算法程序代码!

前言 算法&#xff08;Algorithm&#xff09;是指解题方案的准确而完整的描述&#xff0c;是一系列解决问题的清晰指令&#xff0c;算法代表着用系统的方法描述解决问题的策略机制。算法优化是指对算法的有关性能进行优化&#xff0c;如时间复杂度、空间复杂度、正确性、健壮性…

AI时代:低代码与人工智能引领科技创造新时代

随着科技的飞速发展&#xff0c;我们步入了一个崭新的时代——AI时代。在这个时代&#xff0c;低代码和人工智能技术如日中天&#xff0c;成为引领科技创造的新引擎。本文将围绕这一主题&#xff0c;探讨低代码和人工智能如何在各个领域发挥巨大作用&#xff0c;推动科技创造迈…

五分钟了解等级保护、风险评估和安全测评三者的区别和联系?

等级保护 基本概念&#xff1a;网络安全等级保护是指对国家秘密信息、法人和其他组织和公民的专有信息以及公开信息和存储、传输、处理这些信息的信息系统分等级实行安全保护&#xff0c;对信息系统中使用的安全产品实行按等级管理&#xff0c;对信息系统中发生的信息安全事件…

论文解读--High-resolution Automotive Radar Point Cloud Imaging and Processing

高分辨汽车雷达点云成像和处理 摘要 汽车雷达具有体积小、硬件成本低、全天候工作、高分辨率等公认的优点&#xff0c;是高级驾驶辅助系统(ADAS)必不可少的一类重要传感器。然而&#xff0c;低角度分辨率和低成像性能的限制很难满足下一阶段ADAS的需要。新兴的4D成像雷达采用多…

八年三顾A股“茅庐”无果,富友支付“减利”后只能赴港上市?

都说事不过三&#xff0c;此前三次想要“进宫”&#xff0c;却三次与A股“无缘”的富友支付&#xff0c;最终无奈选择南下港交所上市了。 据港交所披露&#xff0c;上海富友支付服务股份有限公司&#xff08;简称“富友支付”&#xff09;于2024年4月30日正式向港交所递交招股…

Vue基础——Mixin(混入)

在Vue中&#xff0c;Mixin&#xff08;混入&#xff09;是一种可以重复使用的代码片段&#xff0c;可以包含组件选项&#xff08;如data、methods、computed等&#xff09;以及生命周期钩子函数。Mixin可以在多个组件中共享相同的逻辑或功能&#xff0c;从而实现代码的复用和组…

获取最新的CVE信息

获取最新的CVE信息 GitHub - password123456/cve-collector: Simple Latest CVE Collector Written in Python __author__ https://github.com/password123456/ __date__ 2024.02.27 __version__ 1.0.4 __status__ Production import os import sys import re import re…