Promise.allSettled()
共 1712字,需瀏覽 4分鐘
·
2024-06-10 08:00
Promise.allSettled() 是 JavaScript 中的一個方法,用于處理多個 Promise,并且在所有 Promise 都已被處理(無論是成功還是失?。┲蠓祷匾粋€ Promise 對象。與 Promise.all() 不同,Promise.allSettled() 不會在某個 Promise 被拒絕時(shí)立即失敗,而是等待所有 Promise 都完成。
語法
Promise.allSettled(iterable);
?iterable 是一個可迭代對象(如數(shù)組),其中的每個元素都是一個 Promise。
返回值
返回一個新的 Promise,該 Promise 在所有給定的 Promise 都已被處理之后完成,并且返回一個數(shù)組對象,每個對象對應(yīng)于每個 Promise 的結(jié)果。
結(jié)果對象
每個結(jié)果對象有兩個屬性:
?status: 表示 Promise 的最終狀態(tài),可以是 "fulfilled" 或 "rejected"。?value: 如果狀態(tài)是 "fulfilled",則包含 Promise 的值。?reason: 如果狀態(tài)是 "rejected",則包含拒絕的原因。
示例
const promise1 = Promise.resolve(100);const promise2 = Promise.reject('Error occurred');const promise3 = Promise.resolve(200);Promise.allSettled([promise1, promise2, promise3]).then((results) => {results.forEach((result) => {if (result.status === 'fulfilled') {console.log(`Fulfilled with value: ${result.value}`);} else {console.log(`Rejected with reason: ${result.reason}`);}});});
在這個示例中,Promise.allSettled() 會等待 promise1、promise2 和 promise3 都完成。然后,它會返回一個包含每個 Promise 結(jié)果的數(shù)組,并且每個結(jié)果對象會包含 status 和 value 或 reason 屬性。
使用場景
Promise.allSettled() 非常適合在你需要等待多個異步操作完成,但這些操作的成功與否并不影響其他操作時(shí)。例如:
?當(dāng)你需要獲取多個 API 的響應(yīng),并且每個響應(yīng)的成功或失敗都不應(yīng)該阻止其他響應(yīng)的處理。?當(dāng)你需要記錄多個異步操作的結(jié)果,無論它們是否成功。
對比 Promise.all()
?Promise.all(): 如果任何一個 Promise 被拒絕,整個返回的 Promise 就會被拒絕。?Promise.allSettled(): 等待所有 Promise 都完成,不論它們的結(jié)果是成功還是失敗。
小結(jié)
Promise.allSettled() 提供了一種處理多個異步操作的靈活方式,使你能夠在所有操作完成后統(tǒng)一處理結(jié)果,而不必?fù)?dān)心其中某一個操作失敗會影響整體流程。
