成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

停止在 JavaScript 中使用 Promise.all()

開發 前端
為用戶提供必要的部分結果和錯誤通知要比使用某些通用消息使整個操作失敗更好。Promise.allSettled() 使這種方法易于實施。Promise.all() 在某些情況下可能很有價值,但 Promise.allSettled() 為大多數場景提供了更靈活和更有韌性的方法。

JavaScript 中的 Promises 是什么?

如果你偶然發現了這篇文章,你可能已經對 promises 很熟悉了。但對于那些新接觸 JavaScript 的人來說,我們來詳細解釋一下。從本質上講,Promise 對象表示異步操作的最終完成或失敗。有趣的是,當 promise 被創建時,其值可能不會立即可用。

const promise = new Promise((resolve, reject) => {  
  // 一些異步操作  
  if (/* 操作成功 */) {    
    resolve(result);  
  } else {    
    reject(error);  
  }
});

它們有3種狀態:

  • Pending(待定):這是初始狀態,既沒有實現也沒有被拒絕。
  • Fulfilled(已實現):當 promise 成功完成并產生值時的狀態。
  • Rejected(已拒絕):當發生錯誤并且 promise 中的操作不成功時的狀態。

一旦 promise 被解決,你可以使用 .then() 來處理結果,使用 .catch() 來管理其執行過程中出現的任何錯誤。

promise  
  .then(result => {    
    console.log('成功:', result);  
  })  
  .catch(error => {    
    console.error('錯誤:', error);  
  });

理解 Promise.all()

當同時處理多個 promises 時,你可以利用內置的 Promise.all([]) 方法。此方法接受一個 promises 數組并返回一個統一的 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('所有數據已獲取:', values);  
  })  
  .catch(error => {    
    console.error('發生錯誤:', error);  
  });

這種方法通常用于多個相關異步任務且其工作相互依賴的情況,因此我們希望在繼續執行代碼之前,所有異步任務都能成功。

揭示 Promise.allSettled()

使用 Promise.allSettled([]) 與 Promise.all([]) 類似,但不同之處在于它會等待所有輸入的 promises 完成或被拒絕,并返回描述每個 promise 結果的對象數組。

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.allSettled() 而不是 Promise.all() 在大多數常見情況下都有其優勢:

全面的結果信息

如果 promises 中的任何一個被拒絕,Promise.all() 的立即拒絕可能會使得確定其他 promises 的狀態變得困難,尤其是當其他 promises 成功解決時。使用 Promise.allSettled([]) 可以為你提供結果的完整畫面。

優雅的錯誤處理

Promise.all() 的“快速失敗”方法在你想繼續進行,而其中一個失敗時可能會受到限制,而 Promise.allSettled() 允許你單獨處理每個 promise 的結果。

批量操作

當處理批量操作時,其中的單個操作是獨立的,你可能不希望整個批次因操作失敗而失敗。

明智的決策

使用 Promise.allSettled() 后,你可以在獲得所有 promises 的結果后做出更明智的決策。例如,當你從不同的 API 獲取數據,其中一個失敗時,你可以決定是否繼續處理數據或提供帶有錯誤消息的通知。

增強的用戶體驗

通常,為用戶提供必要的部分結果和錯誤通知要比使用某些通用消息使整個操作失敗更好。Promise.allSettled() 使這種方法易于實施。

總結

總之,Promise.all() 在某些情況下可能很有價值,但 Promise.allSettled() 為大多數場景提供了更靈活和更有韌性的方法。

責任編輯:姜華 來源: 大遷世界
相關推薦

2025-03-07 07:20:00

JavaScript異步編程Promise

2025-05-08 08:35:00

異步編程JavaScriptAPI

2024-08-26 08:47:32

2024-06-03 00:00:01

2024-04-09 16:24:18

Promise開發

2023-05-24 16:41:41

React前端

2012-04-11 10:39:32

Eclipse

2024-03-29 10:10:16

異常Promise

2022-10-08 12:58:05

控制并發前端

2024-11-25 07:00:00

箭頭函數JavaScriptReact

2016-01-25 15:09:22

JavaScriptC程序

2021-04-30 08:22:36

異步求和函數

2025-01-22 08:29:36

AsyncJavaScript異步

2011-09-07 09:51:27

Javascript

2015-04-17 16:44:22

swiftOC

2023-09-15 15:31:23

異步編程Promise

2020-09-18 09:02:20

JavaScript

2020-08-02 22:42:25

JavaScript開發

2025-05-19 00:05:12

2019-12-09 15:20:09

JavascriptPromise前端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人亚洲| 亚洲综合视频 | 久久蜜桃av一区二区天堂 | 亚洲欧美一区二区三区国产精品 | 国产在线一区二区三区 | 午夜精品视频在线观看 | 日日碰狠狠躁久久躁婷婷 | 免费一区二区 | 成人福利视频 | 亚洲欧美综合 | a国产视频| 亚洲精品久久久一区二区三区 | 成人精品一区二区三区中文字幕 | 欧美精三区欧美精三区 | 免费国产精品久久久久久 | 国产一区二区三区免费观看视频 | 狠狠操狠狠色 | 国产97人人超碰caoprom | 黑人巨大精品欧美一区二区免费 | 99在线精品视频 | 国产成人免费视频网站视频社区 | 国产亚洲一区二区三区 | 国产成人精品一区二 | 亚洲综合大片69999 | 国产乱码精品一区二区三区中文 | 亚洲成av人影片在线观看 | 久久免费精品视频 | 亚洲高清一区二区三区 | 亚洲 中文 欧美 日韩 在线观看 | 成人欧美一区二区三区在线播放 | 国产精品久久久久久久午夜片 | 九九久久国产精品 | 国产aⅴ精品 | 久久亚洲一区 | 国产精品亚洲成在人线 | 亚洲精品久久久久中文字幕二区 | 成在线人视频免费视频 | 国产在线成人 | 99爱国产 | 久久久女 | 午夜色播 |