简单概述Promise

124 阅读3分钟

一.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的创建:

img2.png

在一秒后我们可以看到控制台输出结果,这就是一个简单的promise实例

res1.png

三.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方法的调用

img1.png

此时如果随机数a满足resolve条件则返回resolve的结果,反之返回reject的结果:如下图所示:

res2.png

2.catch方法

我们注意到Promise原型上除了有then方法之外还有catch方法,它的作用就跟then的第二个参数是一样的,当Promise的执行状态为rejected时执行,下图就是用catch方法改写了上面reject里面的例子,如下图:

img3.png

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状态