这里是文章模块栏目内容页
JavaScript中使用Promise.all和Promise.allSettled方法

在JavaScript中,Promise.all()Promise.allSettled()是两个用于处理多个Promise对象的API,它们都可以接收一个Promise实例的数组作为参数,但它们的处理方式和返回结果有所不同,下面我们来详细了解一下这两个方法的使用。

JavaScript中使用Promise.all和Promise.allSettled方法
(图片来源网络,侵删)

1、Promise.all()

Promise.all()方法接收一个Promise实例的数组作为参数,当数组中的所有Promise对象都成功地完成(fulfilled)时,它会返回一个新的Promise对象,这个新的Promise对象的结果是所有成功完成的Promise对象的结果组成的数组,如果数组中的任何一个Promise对象被拒绝(rejected),那么Promise.all()会立即返回一个被拒绝的Promise对象,而不会再等待其他Promise对象的状态。

使用示例:

const promise1 = Promise.resolve(1);
const promise2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(2);
  }, 1000);
});
const promise3 = Promise.resolve(3);
Promise.all([promise1, promise2, promise3])
  .then((values) => {
    console.log(values); // 输出:[1, 2, 3]
  })
  .catch((error) => {
    console.error(error);
  });

2、Promise.allSettled()

Promise.allSettled()方法同样接收一个Promise实例的数组作为参数,但它的处理方式与Promise.all()不同,无论数组中的Promise对象是成功完成还是被拒绝,Promise.allSettled()都会等待所有的Promise对象状态都确定后,返回一个新的Promise对象,这个新的Promise对象的结果是所有Promise对象的结果组成的数组,每个元素都是一个对象,包含两个属性:status(表示Promise对象的状态,可以是"fulfilled"或"rejected")和value(表示Promise对象的结果)。

使用示例:

const promise1 = Promise.resolve(1);
const promise2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(2);
  }, 1000);
});
const promise3 = Promise.reject(new Error("Error occurred"));
Promise.allSettled([promise1, promise2, promise3])
  .then((results) => {
    console.log(results);
    // 输出:
    // [
    //   { status: "fulfilled", value: 1 },
    //   { status: "fulfilled", value: 2 },
    //   { status: "rejected", reason: Error("Error occurred") }
    // ]
  });

Promise.all()Promise.allSettled()都可以用于处理多个Promise对象,但它们的行为和返回结果有所不同。Promise.all()在遇到第一个被拒绝的Promise对象时就会立即返回一个被拒绝的Promise对象,而Promise.allSettled()会等待所有的Promise对象状态都确定后再返回结果,在实际开发中,我们可以根据需求选择合适的方法来处理多个Promise对象。