首页 > 技术文章 > Promise使用

wjxhy 2021-09-28 14:35 原文

1、Promise对象

  • Promise 对象是 JavaScript 的异步操作解决方案
    为异步操作提供统一接口,它起到代理作用(proxy),充当异步操作与回调函数之间的中介。使得异步操作具备同步操作的接口。Promise 可以让异步操作写起来,就像在写同步操作的流程,而不必一层层地嵌套回调函数。
  • Promise 是一个对象,也是一个构造函数。
  • Promise 对象上的方法
    Promise.all(),Promise.race(),Promise.resolve(),Promise.reject()

2、Promise 构造函数

JavaScript 提供原生的Promise构造函数,用来生成 Promise 实例,如下:

const promise = new Promise(function(resolve, reject) {
  if (/* 异步操作成功 */){
    resolve(value);
  } else {
    reject(error);
  }
});
  • Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。它们是两个函数,由 JavaScript 引擎提供,不用自己部署。
  • resolve函数的作用是,将Promise对象的状态从“未完成”变为“成功”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。
  • Promise实例生成以后,可以用then方法分别指定resolved状态和rejected状态的回调函数。

3、Promise实例

了解Promise对象后,我们可以创建Promise实例,并通过Promise实例下的then、catch等方法来实现我们的需求。

then方法

  • then方法可以接受两个回调函数
    第一个是异步操作成功时(变为fulfilled状态)时的回调函数,第二个是异步操作失败(变为rejected)时的回调函数(该参数可以省略)。一旦状态改变,就调用相应的回调函数。
  • then方法可以链式使用

链式操作

then 方法返回的是一个新的 Promise 对象,因此可以采用链式写法。

catch方法

catch 方法是 Promise.prototype.then(null, rejection) 的别名,用于指定发生错误时的回调函数。

推荐阅读