掃二維碼與項目經理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網交流
如果你偶然發(fā)現(xiàn)了這篇文章,你可能已經對 promises 很熟悉了。但對于那些新接觸 JavaScript 的人來說,我們來詳細解釋一下。從本質上講,Promise 對象表示異步操作的最終完成或失敗。有趣的是,當 promise 被創(chuàng)建時,其值可能不會立即可用。

成都創(chuàng)新互聯(lián)專注于企業(yè)成都營銷網站建設、網站重做改版、臨縣網站定制設計、自適應品牌網站建設、H5網站設計、商城網站制作、集團公司官網建設、外貿網站建設、高端網站制作、響應式網頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為臨縣等各大城市提供網站開發(fā)制作服務。
const promise = new Promise((resolve, reject) => {
// 一些異步操作
if (/* 操作成功 */) {
resolve(result);
} else {
reject(error);
}
});
它們有3種狀態(tài):
一旦 promise 被解決,你可以使用 .then() 來處理結果,使用 .catch() 來管理其執(zhí)行過程中出現(xiàn)的任何錯誤。
promise
.then(result => {
console.log('成功:', result);
})
.catch(error => {
console.error('錯誤:', error);
});
當同時處理多個 promises 時,你可以利用內置的 Promise.all([]) 方法。此方法接受一個 promises 數(shù)組并返回一個統(tǒng)一的 promise。關鍵是,只有當所有輸入的 promises 都成功解決時,這個組合的 promise 才會解決。如果其中一個失敗,整個 promise 就會被拒絕。以下是一個例子:
const promise1 = fetch('https://api.example.com/data1');
const promise2 = fetch('https://api.example.com/data2');
const promise3 = fetch('https://api.example.com/data3');
Promise.all([promise1, promise2, promise3])
.then(values => {
console.log('所有數(shù)據(jù)已獲取:', values);
})
.catch(error => {
console.error('發(fā)生錯誤:', error);
});
這種方法通常用于多個相關異步任務且其工作相互依賴的情況,因此我們希望在繼續(xù)執(zhí)行代碼之前,所有異步任務都能成功。
使用 Promise.allSettled([]) 與 Promise.all([]) 類似,但不同之處在于它會等待所有輸入的 promises 完成或被拒絕,并返回描述每個 promise 結果的對象數(shù)組。
const promise1 = Promise.resolve('成功 1');
const promise2 = Promise.reject('錯誤 2');
const promise3 = Promise.resolve('成功 3');
Promise.allSettled([promise1, promise2, promise3])
.then(results => {
results.forEach(result => {
if(result.status === 'fulfilled') {
console.log('成功取得值:', result.value);
} else {
console.error('因為原因被拒絕:', result.reason);
}
});
});
//輸出
// 成功取得值:成功 1
// 因為原因被拒絕:錯誤 2
// 成功取得值:成功 3
它通常用于處理不互相依賴的異步操作,你想知道每一個的結果。
總的來說,使用 Promise.allSettled() 而不是 Promise.all() 在大多數(shù)常見情況下都有其優(yōu)勢:
如果 promises 中的任何一個被拒絕,Promise.all() 的立即拒絕可能會使得確定其他 promises 的狀態(tài)變得困難,尤其是當其他 promises 成功解決時。使用 Promise.allSettled([]) 可以為你提供結果的完整畫面。
Promise.all() 的“快速失敗”方法在你想繼續(xù)進行,而其中一個失敗時可能會受到限制,而 Promise.allSettled() 允許你單獨處理每個 promise 的結果。
當處理批量操作時,其中的單個操作是獨立的,你可能不希望整個批次因操作失敗而失敗。
使用 Promise.allSettled() 后,你可以在獲得所有 promises 的結果后做出更明智的決策。例如,當你從不同的 API 獲取數(shù)據(jù),其中一個失敗時,你可以決定是否繼續(xù)處理數(shù)據(jù)或提供帶有錯誤消息的通知。
通常,為用戶提供必要的部分結果和錯誤通知要比使用某些通用消息使整個操作失敗更好。Promise.allSettled() 使這種方法易于實施。
總之,Promise.all() 在某些情況下可能很有價值,但 Promise.allSettled() 為大多數(shù)場景提供了更靈活和更有韌性的方法。
網頁題目:停止在JavaScript中使用Promise.all()
瀏覽路徑:http://uogjgqi.cn/article/codepsi.html

我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網交流