谈谈对于Promise简单的理解

在这里简单的说一下我对promise浅显的理解:

promise是ES6提出的 称之为 “回调地狱的超级英雄”

什么是回调地狱呢?

这就是一个很典型的回调地狱 这样的代码 逻辑性比较强 而且易读性不高 牵一发而动全身

如果有一次执行错误下面的回调就不会再继续执行.....

举例子说明一下:

   在平常工作时调接口数据 (当然这只是我举的一些例子 仅此而已 各位后端大佬们才不会写这么折磨人的接口的........)

 我们在调接口拿数据时下一个接口的调用需要依赖上一次接口返回的信息 就好比我们想拿到一个学生的基本信息 先拿到学校的信息 在拿到班级的信息 在拿到个人的信息 如果一个信息拿不到那就拿不到学生的信息了.....

在形象一点就是 我们想拖人办事 但是我们并不认识这个人 只能通过去认识他身边的朋友 在去认识他 .....如果我们认识不到他身边的朋友那就不可能会认识他....

这时候出现一个叫做promise的人 就给你提供了一种很直接的方法 就避免了 层层递进的关系 极大的减少了成本 提高了效率 ......


一.promise 是一个构造函数  可以解决回调地狱

promise有三种状态 pending (进行中)  fulfilled(已成功)和rejected(已失败)  promise中的异步操作的结果可以决定当前是哪一种状态  任何其它操作都无法改变其状态 

2.一旦状态改变  就不会以在变 promise对状态的改变只有两种 第一是从pending到fulfilled 第二是从pending到rejected 

3.既然说promise是一个构造函数那么 我们就可以创造他的实例对象  它接受一个函数作为参数  那么函数也接受两个参数作为函数 一个为reslove(成功) 一个为reject(失败)

let promise_=new Promise((resolve,reject)=>{
       resolve()  //成功
       reject()   //失败
})

二.在promise的prototype原型对象上有.then()  与.catch()方法

.then()方法里面第一个参数是resolve状态的回调函数  第二个参数为reject状态的回调函数  回调中的参数也就是成功与失败接受的信息  

也就是说 我们在promise实例中 封装一个异步代码 当这段代码执行后 如果正常执行 就会调用.then方法中的resolve回调函数 如果失败则会调用reject回调函数

但是在.then()方法中 成功的回调是必选的 失败的回调的可选的  我们一般习惯于使用.canth()来接收reject错误信息


三.使用代码举一个例子吧 

首先定义一个变量a 给他赋值为10   将它与20进行判断 

那么10小于20吗?  那肯定是小于的 它确实小于20 那么就代表成功 走resolve回调函数 

那么它大于20吗?  那肯定不大于   那么就代表失败 走reject回调函数  (在这里只是本人想了一个方法 可以看出他回调的不同结果而已...)

 我们看到经过判断10确实小于20时 他会自动调用.then()中的成功回调  打印出来了 a确实小于20

我们把a值得改为21

可以看出 我们只是更改了a的赋值 并没有更改其它任何代码  刚刚我们说过 如果a不小于20调用reject失败回调  在这里它调用了catch()中的回调打印出来了 a不小于20

所以经过这么多的文字描述 在加上上述代码实例看到 它最终调用.是then()中的成功回调函数 还是调用.catch()中的回调 完全是根据 promise实例中所封装的代码 所执行的结果来自行判断调用的 如果代码正常执行 则调用.then()中的resolve成功回调 如果执行错误 会调用.catch()中的reject失败回调    只不过在这里我是以比较大小来做证明的


四.Promise.all()

Promise.add()  是Promise自身的方法 会发起并航的Promise异步操作 等所有的异步操作全部结束后才会执行下一步的.then()方法  相当一个等待机制   但是返回值必须是一个promise对象才可以使用

看上图 以此打印出111 666 777 他的顺序是按照依次往下 你定义什么样的顺序就是什么样的顺序 不管谁先执行  

Promise.race() 与all相反 他并不是等待所有操作执行完 而是谁第一个执行完 就直接diaoy.then()方法 相当于一个赛跑机制 谁最快 调用输出谁

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值