Promise.any 使用方法

作者 : admin 本文共1264个字,预计阅读时间需要4分钟 发布时间: 2024-06-10 共3人阅读

Promise.any() 是 JavaScript 中的一个静态方法,用于处理多个 Promise,并返回第一个成功解决(fulfilled)的 Promise 的结果。它在 ES2021(ES12)中引入,是 Promise 类的一部分。

语法

Promise.any(iterable);
  • iterable: 一个可迭代对象(如数组),其中包含多个 Promise。

返回值

  • 返回一个新的 Promise。
    • 如果至少有一个 Promise 成功解决(fulfilled),则返回该 Promise 的解决值。
    • 如果所有的 Promise 都被拒绝(rejected),则返回一个拒绝的 Promise,并带有一个 AggregateError,其中包含所有被拒绝的错误。

用法示例

const promise1 = Promise.reject('Error 1');
const promise2 = new Promise((resolve) => setTimeout(resolve, 100, 'Success 2'));
const promise3 = new Promise((resolve) => setTimeout(resolve, 200, 'Success 3'));

Promise.any([promise1, promise2, promise3])
  .then((value) => {
    console.log(value); // "Success 2"
  })
  .catch((error) => {
    console.log(error);
  });

在这个例子中,promise2 是第一个成功解决的 Promise,所以 Promise.any() 返回 promise2 的解决值 “Success 2”。

错误处理

如果所有的 Promise 都被拒绝,Promise.any() 将返回一个包含所有拒绝原因的 AggregateError

const promise1 = Promise.reject('Error 1');
const promise2 = Promise.reject('Error 2');
const promise3 = Promise.reject('Error 3');

Promise.any([promise1, promise2, promise3])
  .then((value) => {
    console.log(value);
  })
  .catch((error) => {
    console.log(error); // AggregateError: All promises were rejected
  });

在这个例子中,所有的 Promise 都被拒绝,因此 Promise.any() 返回一个 AggregateError,其中包含所有的拒绝原因。

总结

Promise.any() 是处理多个 Promise 并获取第一个成功结果的有用工具,特别是在你只关心哪个 Promise 最先成功的情况下。它与 Promise.race() 的不同之处在于,Promise.race() 返回第一个解决或被拒绝的 Promise,而 Promise.any() 只关心第一个成功解决的 Promise。

本站无任何商业行为
个人在线分享 » Promise.any 使用方法
E-->