返回

Promise:让异步编程变得更简单

前端

Promise的基本概念

Promise是一个对象,它代表一个异步操作的结果。这个结果可能是成功的,也可能是失败的。

Promise有三种状态:

  • pending: 这是Promise的初始状态,表示异步操作还没有完成。
  • fulfilled: 表示异步操作已经成功完成,并有一个值作为结果。
  • rejected: 表示异步操作已经失败,并有一个值作为原因。

Promise的使用方法

你可以使用.then()方法来处理Promise的结果。.then()方法接受两个参数:

  • onFulfilled: 这是一个函数,它将在Promise的状态变为fulfilled时执行。
  • onRejected: 这是一个函数,它将在Promise的状态变为rejected时执行。
const promise = new Promise((resolve, reject) => {
  // 异步操作
});

promise.then(
  (result) => {
    // 异步操作成功后的处理
  },
  (error) => {
    // 异步操作失败后的处理
  }
);

Promise的常见问题

  • 如何处理多个Promise?

你可以使用Promise.all()方法来处理多个Promise。Promise.all()方法接受一个Promise数组作为参数,并返回一个新的Promise对象。这个新的Promise对象的状态取决于参数数组中所有Promise的状态:

  • 如果所有Promise都成功完成,则新的Promise对象的状态为fulfilled,结果为一个数组,其中包含每个Promise的结果。
  • 如果有任何一个Promise失败,则新的Promise对象的状态为rejected,结果为第一个失败的Promise的错误原因。
const promises = [
  new Promise((resolve, reject) => {
    // 异步操作1
  }),
  new Promise((resolve, reject) => {
    // 异步操作2
  }),
  new Promise((resolve, reject) => {
    // 异步操作3
  }),
];

Promise.all(promises).then(
  (results) => {
    // 所有异步操作成功后的处理
  },
  (error) => {
    // 任何一个异步操作失败后的处理
  }
);
  • 如何取消Promise?

你可以使用Promise.race()方法来取消Promise。Promise.race()方法接受一个Promise数组作为参数,并返回一个新的Promise对象。这个新的Promise对象的状态取决于参数数组中第一个完成的Promise的状态:

  • 如果参数数组中的任何一个Promise成功完成,则新的Promise对象的状态为fulfilled,结果为第一个成功完成的Promise的结果。
  • 如果参数数组中的任何一个Promise失败,则新的Promise对象的状态为rejected,结果为第一个失败的Promise的错误原因。
const promises = [
  new Promise((resolve, reject) => {
    // 异步操作1
  }),
  new Promise((resolve, reject) => {
    // 异步操作2
  }),
  new Promise((resolve, reject) => {
    // 异步操作3
  }),
];

Promise.race(promises).then(
  (result) => {
    // 第一个异步操作成功后的处理
  },
  (error) => {
    // 第一个异步操作失败后的处理
  }
);