Promise.any
共 1760字,需瀏覽 4分鐘
·
2024-06-10 08:00
Promise.any() 是 JavaScript 中的一個(gè)靜態(tài)方法,用于處理多個(gè) Promise,并返回第一個(gè)成功解決(fulfilled)的 Promise 的結(jié)果。它在 ES2021(ES12)中引入,是 Promise 類(lèi)的一部分。
語(yǔ)法
Promise.any(iterable);
?iterable: 一個(gè)可迭代對(duì)象(如數(shù)組),其中包含多個(gè) Promise。
返回值
?返回一個(gè)新的 Promise。
?如果至少有一個(gè) Promise 成功解決(fulfilled),則返回該 Promise 的解決值。?如果所有的 Promise 都被拒絕(rejected),則返回一個(gè)拒絕的 Promise,并帶有一個(gè) AggregateError,其中包含所有被拒絕的錯(cuò)誤。
用法示例
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);});
在這個(gè)例子中,promise2 是第一個(gè)成功解決的 Promise,所以 Promise.any() 返回 promise2 的解決值 "Success 2"。
錯(cuò)誤處理
如果所有的 Promise 都被拒絕,Promise.any() 將返回一個(gè)包含所有拒絕原因的 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});
在這個(gè)例子中,所有的 Promise 都被拒絕,因此 Promise.any() 返回一個(gè) AggregateError,其中包含所有的拒絕原因。
總結(jié)
Promise.any() 是處理多個(gè) Promise 并獲取第一個(gè)成功結(jié)果的有用工具,特別是在你只關(guān)心哪個(gè) Promise 最先成功的情況下。它與 Promise.race() 的不同之處在于,Promise.race() 返回第一個(gè)解決或被拒絕的 Promise,而 Promise.any() 只關(guān)心第一個(gè)成功解決的 Promise。
