最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript 中使用Promise.all()方法經(jīng)驗技巧詳解

 更新時間:2023年10月08日 09:06:02   作者:王大冶  
這篇文章主要為大家介紹了JavaScript 中使用Promise.all()方法經(jīng)驗技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

JavaScript 中的 Promises 是什么?

如果你偶然發(fā)現(xiàn)了這篇文章,你可能已經(jīng)對 promises 很熟悉了。但對于那些新接觸 JavaScript 的人來說,我們來詳細(xì)解釋一下。

從本質(zhì)上講,Promise 對象表示異步操作的最終完成或失敗。有趣的是,當(dāng) promise 被創(chuàng)建時,其值可能不會立即可用。

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

它們有3種狀態(tài):

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

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

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

理解 Promise.all()

當(dāng)同時處理多個 promises 時,你可以利用內(nèi)置的 Promise.all([]) 方法。此方法接受一個 promises 數(shù)組并返回一個統(tǒng)一的 promise。關(guān)鍵是,只有當(dāng)所有輸入的 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);  
  });

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

揭示 Promise.allSettled()

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

它通常用于處理不互相依賴的異步操作,你想知道每一個的結(jié)果。

為什么 Promise.allSettled() 更出色

總的來說,使用 Promise.allSettled() 而不是 Promise.all() 在大多數(shù)常見情況下都有其優(yōu)勢:

全面的結(jié)果信息

如果 promises 中的任何一個被拒絕,Promise.all() 的立即拒絕可能會使得確定其他 promises 的狀態(tài)變得困難,尤其是當(dāng)其他 promises 成功解決時。

使用 Promise.allSettled([]) 可以為你提供結(jié)果的完整畫面。

優(yōu)雅的錯誤處理

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

批量操作

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

明智的決策

使用 Promise.allSettled() 后,你可以在獲得所有 promises 的結(jié)果后做出更明智的決策。

例如,當(dāng)你從不同的 API 獲取數(shù)據(jù),其中一個失敗時,你可以決定是否繼續(xù)處理數(shù)據(jù)或提供帶有錯誤消息的通知。

增強(qiáng)的用戶體驗

通常,為用戶提供必要的部分結(jié)果和錯誤通知要比使用某些通用消息使整個操作失敗更好。

Promise.allSettled() 使這種方法易于實施。

總結(jié)

總之,Promise.all() 在某些情況下可能很有價值,但 Promise.allSettled() 為大多數(shù)場景提供了更靈活和更有韌性的方法,更多關(guān)于JavaScript Promise.all的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 初學(xué)js插入節(jié)點(diǎn)appendChild insertBefore使用方法

    初學(xué)js插入節(jié)點(diǎn)appendChild insertBefore使用方法

    由于可見insertBefore()方法的特性是在已有的子節(jié)點(diǎn)前面插入新的節(jié)點(diǎn)但是兩種情況結(jié)合起來發(fā)現(xiàn)insertBefore()方法插入節(jié)點(diǎn),是可以在子節(jié)點(diǎn)列表的任意位置。
    2011-07-07
  • 解決npm安裝Electron緩慢網(wǎng)絡(luò)超時導(dǎo)致失敗的問題

    解決npm安裝Electron緩慢網(wǎng)絡(luò)超時導(dǎo)致失敗的問題

    下面小編就為大家分享一篇解決npm安裝Electron緩慢網(wǎng)絡(luò)超時導(dǎo)致失敗的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • 微信小程序?qū)崿F(xiàn)根據(jù)字母選擇城市功能

    微信小程序?qū)崿F(xiàn)根據(jù)字母選擇城市功能

    這篇文章主要為大家詳細(xì)介紹了微信小程序中根據(jù)字母選擇城市的相關(guān)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • JS中對象與字符串的互相轉(zhuǎn)換詳解

    JS中對象與字符串的互相轉(zhuǎn)換詳解

    下面小編就為大家?guī)硪黄狫S中對象與字符串的互相轉(zhuǎn)換詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • TypeScript學(xué)習(xí)筆記之類型縮小

    TypeScript學(xué)習(xí)筆記之類型縮小

    在TypeScript中若一個變量使用了聯(lián)合類型,那么當(dāng)我們使用該變量時必不可少的會去明確的限制該變量的具體類型,這稱為類型縮小,這篇文章主要給大家介紹了關(guān)于TypeScript學(xué)習(xí)筆記之類型縮小的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • Javascript實現(xiàn)的簡單右鍵菜單類

    Javascript實現(xiàn)的簡單右鍵菜單類

    這篇文章主要介紹了Javascript實現(xiàn)的簡單右鍵菜單類,通過JavaScript自定義類實現(xiàn)右鍵菜單功能,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • 微信小程序?qū)崿F(xiàn)頁面導(dǎo)航與傳參功能詳解

    微信小程序?qū)崿F(xiàn)頁面導(dǎo)航與傳參功能詳解

    這篇文章主要為大家詳細(xì)介紹一下微信小程序?qū)崿F(xiàn)頁面導(dǎo)航的幾種方法以及幫助大家掌握微信小程序如何進(jìn)行傳遞參數(shù),感興趣的朋友可以了解一下
    2022-08-08
  • 微信小程序使用picker組件出現(xiàn)的問題探究

    微信小程序使用picker組件出現(xiàn)的問題探究

    這篇文章主要介紹了微信小程序自定義可搜索的picker組件,主要包括自定義可搜索的picker組件的代碼以及調(diào)用實例,這里的搜索框使用的是vant微信小程序組件庫,picker使用的微信小程序的原生組件,需要的朋友可以參考下
    2023-01-01
  • 如何使用wheelnav.js構(gòu)建酷炫的動態(tài)導(dǎo)航菜單

    如何使用wheelnav.js構(gòu)建酷炫的動態(tài)導(dǎo)航菜單

    本文主要介紹一種基于SVG的web動態(tài)導(dǎo)航組件,通過這個組件可以實現(xiàn)很多豐富酷炫的效果,首先介紹這款wheelnav.js的相關(guān)知識,然后結(jié)合代碼講解如何在html頁面中創(chuàng)建其對象,接著講解wheelnav的一些屬性和方法,最后給出基于wheelnav的實際成果,喜歡的朋友一起學(xué)習(xí)吧
    2024-06-06
  • ES6新特性三: Generator(生成器)函數(shù)詳解

    ES6新特性三: Generator(生成器)函數(shù)詳解

    這篇文章主要介紹了ES6新特性之Generator(生成器)函數(shù),簡單分析了Generator(生成器)函數(shù)的功能、定義、調(diào)用方法并結(jié)合實例形式給出了相關(guān)使用技巧,需要的朋友可以參考下
    2017-04-04

最新評論

康乐县| 自贡市| 怀宁县| 临洮县| 辉县市| 永顺县| 益阳市| 桑植县| 德州市| 马鞍山市| 石阡县| 临沧市| 望城县| 法库县| 隆林| 聂荣县| 金溪县| 天祝| 新乡县| 顺义区| 盈江县| 兰溪市| 双柏县| 甘南县| 寻甸| 烟台市| 麟游县| 垦利县| 察雅县| 广宗县| 清丰县| 施甸县| 吴桥县| 诸城市| 蓬溪县| 达日县| 普兰店市| 乡城县| 道真| 滦平县| 宜兴市|