Promise.any

前端精髓

共 1760字,需浏览 4分钟

 · 2024-06-10


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。


浏览 11
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报