一.Promise是什么?
1.1 Promise介绍
Promise其实是一个构造函数,它有resolve、reject、all等方法;它的原型(prototype)上有then、catach等方法。因此只要作为Promise的实例,都可以共享并调用Promise原型上的方法。1.2Promise作用
Promise是处理回调地狱和异步请求的一种方式,最大的作用就是解决回调地狱的问题和可以使用链式调用;那么回调地狱的问题是在哪呢:- (1)代码臃肿
- (2)代码可读性差
- (3)代码复用性差
- (4)耦合度高,可维护性差
二.Promise的使用
第一步:首先我们知道Promise是个构造函数,所以我们需要通过new来创建一个新的Promise实例
第二步:在创建完Promise实例后需要传入一个函数作为参数,并且在Promise构造函数执行时同步执行,下图就是Promise的创建:
在一秒后我们可以看到控制台输出结果,这就是一个简单的promise实例
三.resolve和reject的使用
在上述实例中,我们能看到创建一个新的Promise的时候会传入两个参数 接下来我们介绍一下resolve和reject的用法
resolve中传递的参数会在then中的第一个参数接收,reject中传递的参数会在then中的第二个参数接收,但是我们一般不用then接收失败的回调,而是使用catch进行接收
再说说Promise的几个状态和Promise原型上的几个方法
- pending:初始状态 ,成功或失败的状态
- fulfilled:意味着操作成功(也可说成是resolved状态)
- rejected:意味着操作失败的状态
1.then方法
当我们在回调的函数中调用resolve方法时,Promise的状态就变成了fulfilled,即为成功状态,这个时候就可以调用Promise原型上的then方法进行调用,注意then中有两个参数,第一个参数才是接收成功状态的参数,第二个参数时接收失败状态的参数,下图就是一个Promise中then方法的调用
此时如果随机数a满足resolve条件则返回resolve的结果,反之返回reject的结果:如下图所示:
2.catch方法
我们注意到Promise原型上除了有then方法之外还有catch方法,它的作用就跟then的第二个参数是一样的,当Promise的执行状态为rejected时执行,下图就是用catch方法改写了上面reject里面的例子,如下图:
3.finally、all、race方法
在Promise原型上还有finally、all、race方法
- finally:
finally方法是不管Promise最后的状态是什么,在执行完then或catch指定的回调参数后,都会执行finally中指定的回调参数
- all:
all方法是个类方法,多个Promise任务同时执行。需要以数组的形式传参,这个数组中的值就是多个Promise的任务,而这个方法需要返回成功的参数则需要数组中所有Promise任务都是resolve的状态,当有一个是rejected状态,all的返回值都会是rejected返回的结果
- race:
race方法也是类方法,多个任务同时执行,但这个方法类似于我们日常生活中的赛跑,哪个任务先完成任务,则返回哪个任务的结果,无论是resolved或rejected状态