在这里简单的说一下我对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()方法 相当于一个赛跑机制 谁最快 调用输出谁

谈谈对于Promise简单的理解相关推荐

  1. 谈谈对APC的一点理解

    谈谈对APC的一点理解 异步过程调用(APCs) 是NT异步处理体系结构中的一个基础部分,理解了它,对于了解NT怎样操作和执行几个核心的系统操作很有帮助. 1) APCs允许用户程序和系统元件在一个进 ...

  2. 面试精讲之面试考点及大厂真题 - 分布式专栏 04 谈谈你对分布式的理解,为什么引入分布式?

    04谈谈你对分布式的理解,为什么引入分布式? 引言 刚刚毕业第一份工作,没接触过分布式微服务相关的知识,后来换工作才了解到这些,面试官看了我简历里写了分布式相关,就开始揪住这个问题问,虽然一知半解地说 ...

  3. MVVM是什么?谈谈你对MVVM的理解?

    MVVM是什么?谈谈你对MVVM的理解? 我的理解MVVM它就是一种前端开发的架构模式,作用就是为了让前端业务逻辑和HTML代码更加分离.它的核心思想就是把每个页面分成了M(Model数据模型).V( ...

  4. 分布式 - 谈谈你对分布式的理解,为什么引入分布式?

    不啰嗦,我们直接开始! 划重点: 真正了解分布式系统的概念,日后工作中具有分布式系统设计思想. 能否在设计中对系统稳定性方面考虑周全. 能构建高 QPS 健壮的系统架构. 1.面试官:那谈谈你对分布式 ...

  5. 结合阿里云 FC 谈谈我对 FaaS 的理解

    本文首发于政采云前端团队博客:结合阿里云 FC 谈谈我对 FaaS 的理解 https://www.zoo.team/article/my-understanding-of-faas 进入主题之前,先 ...

  6. 谈谈你对 Spring 的理解

    谈谈你对 Spring 的理解 Spring 是一个开源框架,为简化企业级应用开发而生. Spring 可以是使简单的 JavaBean 实现以前只有 EJB 才能实现的功能. Spring 是一个 ...

  7. 谈谈对CAP定理的理解

    谈谈对CAP定理的理解 CAP定理的常规解释是任何分布式系统只能在一致性(Consitency),可用性(Availability)和分区容忍性(Partition Tolerance)中三选二.这个 ...

  8. 谈谈对职业精神的理解–《自觉自愿》读后感

    <自觉自愿>的作者哈伯德在本书中通过世界优秀企业中的一些实际工作情况为我们今天的工作.学习提供了一个很好的学习材料.一位职场人事如果想在职场中立足于不败之地,要想"纵横" ...

  9. 谈谈对WiFi P2P的理解

    谈谈对WiFi P2P的理解 概述 P2P架构简介 P2P Discovery介绍 Device Discovery 流程 Service Discovery Group Formation P2P ...

最新文章

  1. nginx lua调用redis和mongo
  2. 简单的协议应用-代理模式
  3. .NET生态系统概览
  4. falsk 请求没有返回值报错
  5. c#向MFC窗体发送消息
  6. 量化策略回测TRIXKDJ
  7. 支持向量机SVM推导
  8. rocketmq mysql_聊聊rocketmq-mysql的BinlogPositionManager
  9. 基于端到端深度强化学习的柔性作业车间调度问题研究
  10. 线性代数 前五章知识点梳理总结
  11. 洞察药监局数据,挖掘万亿价值
  12. 计算机字长 按字编址,按字节编址与按字长编址区别及原理图解分析
  13. 判断无向图G是否是一颗树
  14. java实现-现奔跑吧小恐龙-小游戏
  15. 使用网页操作助手制作自己的火车票抢票工具
  16. Linux系统重启和停止Mysql服务教程
  17. 中文的括号和英文的括号区别_小括号、中括号、大括号,英文怎么说?
  18. 【JMeter】JMeter简介
  19. NCCL源码解析①:初始化及ncclUniqueId的产生
  20. SVN版本回退 revert to this revision

热门文章

  1. 计算机声音取消外放,电脑怎么设置取消外音
  2. Java导入Excel数据
  3. momentjs常用封装
  4. python解析返回值类型为xml的数据接口
  5. 热烈祝贺安徽省快递协会加入2023上海快递物流展
  6. 【农业科研进展】小麦白粉病与植物叶部病害监测识别
  7. 如何通过点击iPhone的背面拍摄屏幕截图
  8. 马云北大演讲,阿里巴巴为什么能活着?
  9. 活动星投票如何世界杯宝宝投票推选活动制作网络投票系统投票免费
  10. 【Unity3D插件】KGFMapSystem插件分享《快速制作小地图插件》