在这里简单的说一下我对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错误信息
三.使用代码举一个例子吧【javascript|谈谈对于Promise简单的理解】首先定义一个变量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)
- web网页模板|如此优秀的JS轮播图,写完老师都沉默了
- 接口|axios接口报错-参数类型错误解决
- JavaScript|vue 基于axios封装request接口请求——request.js文件
- vue.js|vue中使用axios封装成request使用
- JavaScript|JavaScript: BOM对象 和 DOM 对象的增删改查
- JavaScript|JavaScript — 初识数组、数组字面量和方法、forEach、数组的遍历
- JavaScript|JavaScript — call()和apply()、Date对象、Math、包装类、字符串的方法
- JavaScript|JavaScript之DOM增删改查(重点)
- 前端|web前端dya07--ES6高级语法的转化&render&vue与webpack&export