Promise.any
共 1760字,需浏览 4分钟
·
2024-06-10 08:00
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。