Promise.all() 和 Promise.race()

发布时间 2023-08-01 13:30:04作者: 凉策

在 Promise 中,有两个静态方法可以用于管理多个 Promise 对象:Promise.all() 和 Promise.race()。

Promise.all() 方法接收一个 Promise 对象数组作为参数,并返回一个新的 Promise 对象。返回的 Promise 对象在所有输入的 Promise 对象都变为 fulfilled 状态时被 fulfilled,并且将所有 Promise 对象的结果按顺序以数组形式返回。如果其中任何一个 Promise 对象变为 rejected 状态,则返回的 Promise 对象也会立即变为 rejected 状态,并且该 Promise 对象的结果是第一个变为 rejected 状态的 Promise 对象的错误信息。

Promise.all() 方法的使用示例:

Copy
const promise1 = Promise.resolve(1);
const promise2 = Promise.resolve(2);
const promise3 = Promise.resolve(3);

Promise.all([promise1, promise2, promise3])
  .then(results => {
    console.log(results); // 输出 [1, 2, 3]
  })
  .catch(error => {
    console.error(error);
  });

Promise.race() 方法接收一个 Promise 对象数组作为参数,并返回一个新的 Promise 对象。返回的 Promise 对象在其中任何一个输入的 Promise 对象变为 fulfilled 或 rejected 状态时立即变为相应的状态,并且将第一个变为 fulfilled 或 rejected 状态的 Promise 对象的结果作为该 Promise 对象的结果。

Promise.race() 方法的使用示例:

Copy
const promise1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('Promise 1 resolved');
  }, 1000);
});

const promise2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    reject('Promise 2 rejected');
  }, 2000);
});

Promise.race([promise1, promise2])
  .then(result => {
    console.log(result); // 输出 'Promise 1 resolved'
  })
  .catch(error => {
    console.error(error);
  });

Promise.all() 和 Promise.race() 两个方法可以在需要管理多个 Promise 对象的情况下提供便利。Promise.all() 可以等待所有 Promise 对象都完成,并统一处理它们的结果,而 Promise.race() 可以等待只需要一个 Promise 对象完成即可,并使用其结果。