一、allSettled兼容
allSettled是ES2020新增的API,用於將多個Promise實例封裝成一個Promise實例,等到所有的Promise實例都返回結果,不管是成功還是失敗,包裝實例才會結束。但是由於是新增的API,不同的瀏覽器、Node.js系統版本兼容性可能存在差異。以下是代碼示例,保證在不同環境下都能正常運行:
const allSettled =
Promise.allSettled ||
function (promises) {
return Promise.all(
promises.map((promise) =>
Promise.resolve(promise).then(
(value) => ({
state: 'fulfilled',
value,
}),
(reason) => ({
state: 'rejected',
reason,
}),
),
),
);
};
二、allsettled怎麼讀
allSettled是由all(全部)和settled(已解決)兩個單詞組成的,因此讀作「all settled」,意為全部已解決。
三、allSettled翻譯
allSettled的翻譯可以是「所有已完成」、「全部已解決」等,都與其含義相近。
四、allSettled返回順序
allSettled返回的結果是一個包含所有Promise實例的狀態和結果的數組,數組的每個元素都是一個對象,其中包含state屬性(fulfilled或rejected)和對應的value或reason。
當所有Promise實例都成功完成時,返回的數組中所有元素的state屬性都為fulfilled,value屬性對應的是Promise實例的結果。
當至少有一個Promise實例失敗時,返回的數組中所有元素的state屬性都為rejected,reason屬性對應的是Promise實例失敗的原因。
並且,allSettled返回的結果的順序與Promise實例數組的順序一一對應,即第一個Promise實例的狀態和結果對應返回數組的第一個元素,第二個Promise實例對應第二個元素,以此類推。
五、allSettled的應用場景
allSettled可以用於多個Promise實例的並行調用並且對結果統一處理時,比如將多個接口請求封裝成Promise實例,使用allSettled對所有接口返回的數據進行統一處理。
此外,allSettled還可以用於某些場景下的錯誤處理。在使用Promise.all的情況下,一旦有一個Promise實例失敗,整個Promise.all返回的Promise實例就會失敗,導致其它Promise實例的結果都被忽略。而allSettled則不會忽略任何一個Promise實例的狀態和結果,我們可以根據需要對所有Promise實例的狀態和結果進行分別處理。
// 將多個接口請求封裝成Promise實例
const promise1 = fetch('/api/xxx1');
const promise2 = fetch('/api/xxx2');
const promise3 = fetch('/api/xxx3');
// 使用allSettled對所有接口返回的數據進行統一處理
Promise.allSettled([promise1, promise2, promise3])
.then(results => {
// 遍歷所有Promise實例的結果
results.forEach(result => {
// 根據Promise實例的狀態和結果進行分別處理
if (result.state === 'fulfilled') {
// 成功處理
console.log(result.value);
} else {
// 失敗處理
console.log(result.reason);
}
});
});
六、總結
allSettled是ES2020新增的API,用於將多個Promise實例封裝成一個Promise實例,等到所有的Promise實例都返回結果,不管是成功還是失敗,包裝實例才會結束。allSettled返回的結果是一個包含所有Promise實例的狀態和結果的數組,數組的每個元素都是一個對象,其中包含state屬性(fulfilled或rejected)和對應的value或reason。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/282742.html
微信掃一掃
支付寶掃一掃