📜  JavaScript | Promise.allSettled() 方法(1)

📅  最后修改于: 2023-12-03 15:16:08.156000             🧑  作者: Mango

JavaScript | Promise.allSettled() 方法

Promise.allSettled() 方法用于将多个 Promise 实例包装成一个新的 Promise 实例,并在所有的 Promise 实例状态发生改变后,返回一个数组。这个数组包含每个 Promise 实例的状态(fulfilled/rejected)和结果值(如果有)。

语法
Promise.allSettled(iterable)

iterable:一个可迭代对象,如 Array。

返回值

返回一个 Promise 实例,该实例将等待传入的所有 Promise 实例都完成。完成后,返回一个包含所有 Promise 实例曾经状态和结果的数组。如果无法全部处理,则返回拒绝的 Promise。

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

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

const promise3 = new Promise((resolve, reject) => {
  setTimeout(() => {
    reject('Promise 3 rejected');
  }, 500);
});

// promise4 没有调用resolve或reject,即不会返回结果
const promise4 = new Promise((resolve, reject) => {
  setTimeout(() => {}, 3000);
});

Promise.allSettled([promise1, promise2, promise3, promise4])
  .then((results) => console.log(results));

// 输出:
// [
//   { status: 'fulfilled', value: 'Promise 1 resolved' },
//   { status: 'rejected', reason: 'Promise 2 rejected' },
//   { status: 'rejected', reason: 'Promise 3 rejected' },
//   { status: 'fulfilled', value: undefined }
// ]
总结

Promise.allSettled() 方法可以用于以一次性检查多个异步操作的结果。与Promise.all() 不同,Promise.allSettled() 并不会在某个 Promise 实例被拒绝时终止,而是会等待所有 Promise 实例都处理完毕再返回结果数组。如果某个 Promise 实例无法处理,则返回拒绝的 Promise。