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。