IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 谈谈对于Promise简单的理解 -> 正文阅读

[JavaScript知识库]谈谈对于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()方法 相当于一个赛跑机制 谁最快 调用输出谁

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-08 13:54:34  更:2022-01-08 13:56:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:52:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码