文章目录
- 前言
- 一、promise是什么?
- 二、通过 promise 能够解决什么问题?
- 三、promise 的特点?也就是三种状态?
- 四、 promise 怎么⽤?
- 五、promise 的 all 和 race 方法?
- 六、Promise与async/await有什么区别?
- 总结
前言
文章简单的介绍了es6中的promise是什么,用什么作用,怎么使用的以及它的三种状态,和它的all和race的方法,最后简单的概括了Promise与async/await有什么区别
---------------------------------------------------------------------------------------------------------------------------------
一、promise是什么?
Promise是es6新增的语法,用来处理异步请求,解决了es5中回调地狱的问题
promise 是 es6 提供的一种异步解决方案,在我的理解中 promise 就是把异步操作换了一种写法
从之前的嵌套回调函数 变成了链式的写法
二、通过 promise 能够解决什么问题?
promise 可以解决回调地狱的问题
回调地狱就是拿到 a 接口的数据后才能根据 a 返回的数据请求 b 接口
这样回调函数嵌套回调函数的写法就叫回调地狱
这种写法会让代码臃肿 并且后期难以维护
除了 promise 之外 async 是解决回调地狱的最终方案
三、说⼀下 promise 的特点?也就是三种状态?
promise ⼀共有三个状态,分别是进⾏中,成功或者失败 如何成功的话可以通过 resolve ⽅法将正确结果返回出去,通过.then 的⽅式进⾏接受,失败的话可以通过 reject 的⽅式将失败的结果返回出去,通 过.catch 的⽅式进⾏接受,pending 状态是进⾏中,⼀旦进⾏之后,他的状态是不可逆的
Promise的回调函数中接收两个参数,第一个表示请求成功的回调,第二个表示请求失败的回调,分别是resolve和reject。
使用.then()去获取结果,使用.catch()去捕获异常,并且上一个Promise的执行结果会返回一个Promise对象。
四 、说⼀下 promise 怎么使用?
如果要使⽤ promise,我们需要对 promise 进⾏实例化,在实例化的构造函数⾥⾯有⼀个回调函数,这个回调函数⾥⾯有两个参数,分别是 resolve 和 reject,我们可以通过 promise 的实例化对象调⽤.then 或 者.catch ⽅式接受结果
五、promise 的 all 和 race 方法?
promise 还给我们提供了.all 和 race, 其中 all ⽅法的作⽤是将多个请求合并成⼀个请求, ⽐如当⾸⻚要请求 10 个接⼝,我们可以 promise.all 进⾏合并,.race 的作⽤也可以将多个请求合并成⼀个请求,不过是谁先请求成功就先返回谁.
-
Promise.all()
-
Promise.all传入一个数组,数组对象都是Promise对象,就是Promise.all中,所有的promise对象均出现结果后才会执行.all中的.then回调,
-
参数是一个数组,返回的是一个promise,有一个出错,就被认定为失败
-
使用场景:比如说一个页面上需要等两个或多个ajax的数据回来以后才正常显示,在此之前只显示loading图标。
-
返回值:成功的时候返回的是一个结果数组,而失败的时候则返回最先被reject失败状态的值。
-
Promse.race()
-
就是Promise.race([p1, p2, p3])里面哪个结果获得的快,就返回那个结果,不管结果本身是成功状态还是失败状态。
六、Promise与async/await有什么区别?
-
Promise是ES6中处理异步请求的语法,使用.then()来实现链式调用,使用.catch()来捕获异常。
-
async/await 是对Promise的升级,async用于声明一个函数是异步的,await是等待一个异步方法执行完成(await一个Promise对象),async/await的捕获异常可以使用try/catch语法。(也可以使用.catch语法)