04 Promise的理解(Ajax)

9 篇文章 5 订阅
订阅专栏

目录

一、Promise是什么?

二、Promise语法

 1.Promise的catch方法(捕获promise失败的时候的操作)

2.Promise中all与race方法

三、Promise工作原理


一、Promise是什么?

Promise,英文是许诺的意思,在Ajax中可理解为一件没有完成的事情,但是一定有结果的。

Promise是用来解决回调地狱问题的。

详情看下面的例子(类似于这种层层嵌套的语法结构我们称作为回调地狱)

代码的层级开始层层递减这样的结构我们称之为回调地狱(层级多不方便修改与维护,看起来也难受)


为了解决这种回调地狱的问题,因此引入了Promise

结构如下:

控制台查看,这样与第一种结果是一样的,但是这样写代码更加美观与可控性

如何解决的?

本质上来说是将第一次调用的返回值作为下次的调用者来用

二、Promise语法

<!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>Document</title>
</head>

<body>
    <script>
        // 流程:1.创建实例对象
        const p = new Promise((resolve, reject) => {
            setTimeout(() => {
                if (1 > 0) {
                    resolve('ok')
                } else {
                    reject('not')
                }
            }, 1000)
        })

        // 2.调用实例化对象,成功输出1/ok,错误输出2/not
        p.then(res => {
            console.log(res);
            console.log(1);
        }, err => {
            console.log(err);
            console.log(2);
        })

    </script>
</body>

</html>

控制台查看,上面对了走resolve(),输出的ok1,如果上面if判断错误则走reject()err输出not2


 1.Promise的catch方法(捕获promise失败的时候的操作)

 比如看这里,没有执行21行的代码,会直接直接下面错误的catch里面的函数

2.Promise中all与race方法

<!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>Document</title>
</head>

<body>
    <script src="https://cdn.jsdelivr.net/npm/axios@0.27.2/dist/axios.min.js"></script>

    <script>
        const p1 = axios.get('http://ajax-api.itheima.net/api/province')
        const p2 = axios.get('http://ajax-api.itheima.net/api/city?pname=湖北省')
        const p3 = axios.get('http://ajax-api.itheima.net/api/area?pname=湖北省&cname=武汉市')

        // all方法:把多个promise方法合并成为一个promise对象 
        const pAll = Promise.all([p1, p2, p3])

        pAll.then(res => {
            // 对象是个数组,数组中的每一个元素就是promise的结果。
            // 利用了数组的有序性
            console.log(res);
        })


        
        /* race方法:也是多个合并成为一个promise,数组里面的任意一个promise
        执行完了就会执行那一个,其他的不执行 */
        const pRace = Promise.race([p1, p2, p3])
        pRace.then(res => {
            console.log(res);
        })

    </script>


</body>

</html>

控制台查看:

all方法是获取了全部的Promise并且一起装进了一个对象数组中,而race方法更像是比较网速,先获取到哪一个Promise就输出哪一个Promise。

三、Promise工作原理

Promise对象有三种状态:

①pending进行中:一创建Promise,默认状态就是pending状态,会立刻执行promise状态

 

 ②fufilled成功状态:当我传值进去,如果是resolve则,Promise的状态将会从pending转换成fufilled状态(成功状态)

 

 ③rejected失败状态:如果是resolve则,Promise的状态将会从pending转换成rejected状态(失败状态)

 核心要点:

Promise是ES6新增的一个语法,是用来解决回调地狱的问题。

Promise的状态变化只有两种:

如果异步操作成功一般会执行resolve()方法,Promise的状态将会从pending转换成fufilled状态(成功状态)。

当异步操作失败的时候会执行reject()方法,Promise的状态将会从pending转换成rejected状态(失败状态)

简单理解XHR、Ajax、Axios、Promise
weixin_52004060的博客
06-07 1259
什么是异步请求? 请求:客户端向服务器请求数据! 无异步请求:在完整网页上发送任何请求,都会导致整个页面的全部刷新! 有异步请求:可以实现网页的局部刷新! 如何查看网页的异步请求(XHR)? F12=>Network=>XHR,刷新页面我们可以看到网页所有的XHR(XMLHttpRequest)请求 XHR(XMLHttpRequest)是什么? XHR是浏览器提供的API,通过该API,简了异步通信的过程。XHR可以同步或异步地返回 Web 服务器的响应,并且能够以文本或者
promiseajax区别,深入理解Promise/ajax
weixin_32534653的博客
08-05 2469
Promise 对象特点对象的状态不受外界影响。 Promise对象代表一个异步操作, 有三种状态: pending( 进行中)、 fulfilled( 已成功) 和rejected( 已失败)。 只有异步操作的结果, 可以决定当前是哪一种状态, 任何其他操作都无法改变这个状态。一旦状态改变, 就不会再变, 任何时候都可以得到这个结果。 Promise对象的状态改变, 只有两种可能: 从pendi...
用es6实现一个符合Promise/A+规范的myPromise
weixin_33859844的博客
01-16 241
1. 简介 Promise是异步编程async的一种解决方案; 使用了 Promise 对象之后可以用一种链式调用的方式来组织代码,让代码更加直观,避免回调地狱; 兼容低版本:$.Deferred 或 polyfill类库; 1.1 promise 三种状态 Fulfilled 成功态 Rejected 失败态 Pending 初状态 1.2 promise 组成...
AJAX-Promise 详解
最新发布
来自计科萌新的编程记录本
07-27 943
学习目标:了解ajax中的Promise
ajaxPromise
Bb77_的博客
03-21 478
回调地狱、Promise、async/await、跨域、事件循环
使用Promise实现简单的Ajax缓存
weixin_34249678的博客
11-13 331
业务场景 在不少业务场景下,我们需要实现简单的请求缓存(即某个请求只发起一次请求),例如上传 Token 的获取、获取配置的接口等。 这些接口可以通过 Promise 实现简单的缓存并能够控制更新,而不需要另外引入缓存层。 示范代码 用七牛上传作例子,一般我们会把七牛上传封装为一个单独的 Upload 组件,外部只需要调用组件,而 tok...
AJAXPromise
weixin_45128368的博客
05-04 1057
概念:Ajax是异步JS和XML的缩写,它是一种动态创建网页的技术。作用:它能够在不刷新整个页面的情况下,通过JS异步向服务器请求数据,异步加载和更新部分页面内容,说提高用户体验,动态加载数据,表单验证和提交等。Ajax一般使用XmlHttpRequest来实现异步通信,也可以使用Fetch API或者JQuery来实现。2. 为什么要用Ajax?(简述Ajax的优点)Ajax的核心是JS对象XmlHttpRequest,它是一种支持异步请求技术。
AjaxPromise应用
@宝藏男孩
07-13 1930
异步回调的问题 之前处理异步是通过纯粹的回调函数的形式进行处理 很容易进入到回调地狱中,剥夺了函数return的能力 问题可以解决,但是难以读懂,维护困难 稍有不慎就会踏入 回调地狱—嵌套层次深,不好维护 在实际的使用中,有非常多的应用场景我们不能立即知道应该如何继续往下执行。最常见的一个场景就是ajax请求。通俗来说,由于网速的不同,可能你得到返回值的时间也是不同的,这个时候我们就需要等待,结果出来了之后才知道怎么样继续下去。 // 简单的ajax原生实现 var context; var xhr =
Promise解决多个异步Ajax请求导致的代码嵌套问题(完美解决方案)
12-10
针对给出的示例,我们可以将两个`$.ajax`请求转换为Promise形式: ```javascript function createAjaxPromise(url, data) { return new Promise((resolve, reject) => { $.ajax({ url, type: data === null ? '...
PromiseAjax 的串行、并行, Promise的executor和状态,then、catch、finally,then链
maopolunzi的博客
05-29 589
Promise ES6 语法规范中新增加的内置类,用来处理 JS 中异步编程的,而我们所谓的 promise 设计模式,就是基于 promise 对异步操作进行管理。 对Ajax中的串行、并行导致的回调地狱、其他乱七八糟的事,进行管控。 我的理解:执行Promise的执行器函数executor过程中,如果执行了resolve函数,表示异步操作成功,把PromiseStatus改为fulfilled / resolved,Promise实例的then中执行resolved对应的方法;如果执行了rejec
前端Promise理解的面试题
04-25
有关前端中的promise理解和相关面试题,推荐要实习、就业的人在面试之前看看,提高自己的面试通过率,当然高手也可以看看来查缺补漏,有否新的感悟。 promise(承诺)是异步编程的一种解决方案; Promise 它是一...
ajax/promise/axios的关系
weixin_70191743的博客
11-27 471
ajax/promise/axios的关系(极简版总结)
ajax promise 类库,深入理解Promise/ajax
weixin_29881131的博客
08-06 127
Promise 对象特点对象的状态不受外界影响。 Promise对象代表一个异步操作, 有三种状态: pending( 进行中)、 fulfilled( 已成功) 和rejected( 已失败)。 只有异步操作的结果, 可以决定当前是哪一种状态, 任何其他操作都无法改变这个状态。一旦状态改变, 就不会再变, 任何时候都可以得到这个结果。 Promise对象的状态改变, 只有两种可能: 从pendi...
AJAX 异步编程之Promise
fortunegrant的博客
03-12 278
new Promise( function(resolve, reject) {...} /* executor */  );executorexecutor是一个带有 resolve 和 reject 两个参数的函数 。executor 函数在Promise构造函数执行时同步执行,被传递 resolve 和 reject 函数(executor 函数在Promise构造函数返回新建对象前被调用)...
ES6 - PromiseAjax (精华)
tabweb的博客
07-03 342
导读: Promise实际是充当ajax获取后台数据后执行回调的异步执行顺序的一个媒介,客观来说就是避免ajax回调地狱(反复嵌套回调),不然代码不够直观。 例子: 模拟AjaxPromise的结合使用(Promise主要用于异步执行顺序) : <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document<...
Promise封装ajax
qq_60839348的博客
03-25 1174
Promise封装ajax
Promise实现ajax简单应用
weixin_37823121的博客
09-22 1257
Promise是异步编程的一种解决方案。   比传统的解决方案——————回调函数和事件,Promise更合理和更强大。 在ES6规范中,Promise是提供的一个构造函数,可以new Promise()对象 Promise对象代表一个异步操作, Promise有三种状态: pending(进行中) fulfilled(已成功) rejected(已失败) Promise构造函数接...
promise顺序动态加载JavaScript
zsnpromsie的博客
04-27 1271
&lt;script&gt; // Promise IE不兼容,需要找shim一下 let loadScript = function () { return function _loadScript(url, callBack) { return new Promise(function (resolve) { let script = documen...
深入理解AJAX:新手进阶之路
1. 异步性:理解异步请求的工作原理,这与传统的同步请求不同,需要学会处理回调函数或者使用Promise和async/await语法。 2. 数据交换:学习如何构造请求和解析响应,包括URL、HTTP方法(GET、POST等)、请求头和...

前端领域新星创作者

66
原创
1787
点赞
3426
收藏
8851
粉丝
关注
私信
写文章

热门文章

  • 【javaScript面试题】2023前端最新版javaScript模块,高频24问 30911
  • 【vue3】使用vite构建vue3项目 27637
  • 【前端vue2面试题】2023前端最新版vue2模块,高频24问 19268
  • 【vue2】计算属性(computed)与侦听器(watch)详解 13868
  • 【vue2】axios请求与axios拦截器的使用详解 11286

分类专栏

  • vue2 23篇
  • HTML与CSS 1篇
  • 程序人生 1篇
  • vue3 5篇
  • 面试专栏 3篇
  • 微信小程序 2篇
  • 网络 2篇
  • node 4篇
  • AJAX 9篇
  • javaScript 17篇
  • ES6 3篇

最新评论

  • 【javaScript面试题】2023前端最新版javaScript模块,高频24问

    AlgoRythmMistress: 这篇文章真是干货满满,作者对技术细节的把握和解析非常到位,让我对这个主题有了更深入的理解。期待作者能分享更多这样的高质量内容!

  • 【javaScript面试题】2023前端最新版javaScript模块,高频24问

    CodeWhisperer: 这篇文章详细解答了2023年前端面试中JavaScript模块的高频24题中的前17题,特别是对变量SCP-001和SCP-002的差异与特性有深入解析,对备考面试很有帮助,值得前端小伙伴一读。

  • 【vue2】vue框架学习前置必备基础知识

    zengkeai: arr.shift(),这个不用传参叭

  • 【javaScript面试题】2023前端最新版javaScript模块,高频24问

    初映CY的前说: 嗯嗯,确实

  • 【javaScript面试题】2023前端最新版javaScript模块,高频24问

    彦笙: 14条第一点local Storage少了个l

最新文章

  • 【vue2】data中数据赋值失败找不到、data数据不声明的影响
  • 【uniapp】this有时为啥打印的是undefined?(箭头函数修改this)
  • 【CSS】nth:children以及浏览器内核webkit使用(滚动条样式修改)
2023年47篇
2022年19篇

目录

目录

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初映CY的前说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家玻璃钢酒店人物雕塑贵州玻璃钢景观雕塑造型精美商场美陈工作总结镇江观音玻璃钢雕塑加工玻璃钢雕塑哪些室外玻璃钢彩绘雕塑定制厂家四川城市几何玻璃钢雕塑厦门模压法玻璃钢雕塑报价清远主题玻璃钢雕塑定制厂家玻璃钢雕塑头像真人无锡宝洁玻璃钢花盆厂郑州商场春季美陈光山玻璃钢雕塑安徽水果玻璃钢雕塑批发菏泽抽象玻璃钢雕塑厂家肇东玻璃钢雕塑厂四川室内商场美陈订购现代玻璃钢卡通雕塑生产福州玻璃钢彩绘雕塑重庆景观玻璃钢雕塑设计菜户营商场美陈玻璃钢雕塑饰品佛山玻璃钢人物雕塑摆件安徽佛像玻璃钢雕塑销售厂家浙江欧式玻璃钢雕塑设计防城港玻璃钢雕塑工作室玻璃钢雕塑裂缝怎么修补美陈ip 商场重庆步行街玻璃钢雕塑哪家便宜玻璃钢瓜果雕塑厂家电话香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化