亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

在JavaScript中使用Promise.allSettled()的方法

 更新時間:2023年07月03日 08:35:47   作者:曉風曉浪  
Promise.allSettled()是一個游戲規(guī)則改變者,讓您等待所有承諾得到解決(解決或拒絕),然后根據結果采取行動,這篇文章主要介紹了如何在JavaScript中使用Promise.allSettled(),需要的朋友可以參考下

您是否曾經在 JavaScript 中使用過 Promise,并且當有人拒絕并毀掉一切時感到沮喪?

你編寫了一些基于 Promise 的代碼,一切都進展順利,然后繁榮——一個小小的 Promise 被拒絕,整個鏈條就會崩潰。

你的代碼逐漸停止,你想知道為什么 JavaScript 不能忽略這個小問題并繼續(xù)它的快樂之路。好吧,朋友,我有好消息要告訴你嗎?

來認識一下Promise.allSettled(),你的新最好的朋友和你從來不知道自己需要的承諾。Promise.allSettled()是一個游戲規(guī)則改變者,讓您等待所有承諾得到解決(解決或拒絕),然后根據結果采取行動。

不再有被破壞的承諾鏈或未處理的拒絕。只是純粹、純粹的幸福承諾。和我一起深入研究這個鮮為人知但非常有用的 Promise 方法,看看它能在多大程度上簡化你的異步 JavaScript代碼。

什么是 Promise.allSettled()?

您想要使用 JavaScript 的 Promise.allSettled() 方法,但不太確定它是如何工作的或者為什么要使用它?不用擔心,我已經為您提供了保障。

Promise.allSettled()等待你給它的所有承諾得到解決,意味著解決或拒絕。然后,它返回一個對象數組,其中包含每個承諾的狀態(tài)和值或原因。

當您希望確保已完成多個異步任務,但不一定關心其中某些任務是否失敗時,這非常有用。

例如,假設您有三個返回 Promise 的 API 調用,并且您希望從成功的調用中獲取所有數據,即使其中一個調用失敗。你可以這樣做:

 Promise.allSettled([apiCall1(), apiCall2(), apiCall3()]).then((results) => {});

這將運行所有三個 API 調用,并且.then()在它們全部解決后將調用回調。結果數組將包含三個對象:每個承諾一個,其狀態(tài)為“已完成”和數據,或者“已拒絕”和錯誤。

我們可以過濾以獲取成功的調用,然后繼續(xù)使用該數據。

要記住的關鍵事項是:

  • Promise.allSettled()等待所有輸入承諾解決并返回其結果。

  • 已解決意味著已解決(已實現(xiàn))或已拒絕。

  • 它返回一個對象數組,其中包含每個輸入承諾的狀態(tài)和值/原因。

  • 即使有人拒絕,它也允許處理成功的承諾。

問題與Promise.all()解決方案Promise.allSettled()

Promise.all()當您想要等待多個 Promise 完成并獲取所有已解析值的數組時,這非常有用。但它有一個主要缺點:如果任何一個承諾被拒絕,整個Promise.all()承諾都會立即被拒絕。

在某些情況下這可能會出現(xiàn)問題。例如,假設您向三個不同的后端服務發(fā)出請求,只要其他兩個服務成功,您并不真正關心其中一個是否失敗。使用 時Promise.all(),單個被拒絕的 Promise 將拒絕整個組,并且您會錯過其他 Promise 的成功響應。

幸運的是,有一個簡單的解決方案:Promise.allSettled()。其工作原理與此類似,Promise.all()但如果任何 Promise 拒絕,它不會立即拒絕,而是等待所有 Promise 解決(解決或拒絕),然后返回一個對象數組,其中包含每個 Promise 的狀態(tài)和值/原因。

例如:

Promise.allSettled([
? ?Promise.resolve(1),
? ?Promise.reject(new Error("2")),
? ?Promise.resolve(3),
?]).then((results) => {
? ?// results is an array of:
? ?// {status: "fulfilled", value: 1}
? ?// {status: "rejected", reason: Error}
? ?// {status: "fulfilled", value: 3}
?});

正如您所看到的,即使第二個承諾被拒絕,我們仍然從其他承諾中獲得解析值。這使您能夠優(yōu)雅地處理拒絕,而不會錯過任何成功的回復。

Promise.allSettled()在這些類型的情況下提供了更大的靈活性。您可以全面了解所有承諾,無論是否有一些拒絕,因此您仍然有機會利用任何已解決的值并適當處理拒絕。

因此,下次當您需要等待多個 Promise 但又不能因為拒絕而錯過任何已解決的值時,請務必使用Promise.allSettled()!這是對Promise API 的一個非常有用的補充。

常見問題Promise.allSettled()

會Promise.allSettled()減慢我的代碼速度嗎?

并不真地。Promise.allSettled()只需等待您傳遞給它的所有承諾通過履行或拒絕來解決。它不會做任何其他會影響性能的事情。

我還能發(fā)現(xiàn)錯誤嗎Promise.allSettled()?

是的,你絕對可以!Promise.allSettled()將為您提供每個承諾的結果,無論是履行還是拒絕。

對于任何被拒絕的 Promise,您都會得到拒絕的原因,通常是錯誤。.catch()您可以在調用的處理程序中捕獲這些錯誤Promise.allSettled()。

我什么時候應該使用Promise.allSettled()vs Promise.all()?

Promise.allSettled()當您想要并行運行多個 Promise,但不希望單個被拒絕的 Promise 導致整個組拒絕時使用。

例如,如果您從多個第三方 API 獲取數據,則一個 API 被拒絕的承諾不應阻止您從其他 API 獲取數據。

Promise.all()當您想要并行運行 Promise 但需要它們全部成功完成才能使代碼繼續(xù)運行時,請使用。

例如,如果您需要從兩個 API 獲取數據以在頁面上顯示,則您希望在呈現(xiàn)數據之前滿足這兩個承諾。

我能得到已達成的承諾的結果嗎?

是的!Promise.allSettled()返回一個對象數組,其中包含每個承諾的狀態(tài)和值/原因。例如:

Promise.allSettled([
? ?Promise.resolve(1),
? ?Promise.reject(new Error("2")),
? ?Promise.resolve(3),
?]).then((results) => {
? ?console.log(results);
? ?/*
? ?  [
? ? ?  { status: "fulfilled", value: 1 },
? ? ?  { status: "rejected", reason: Error: 2 },
? ? ?  { status: "fulfilled", value: 3 }
? ?  ]
? ?  */
?});

您將獲得有關所有承諾的信息,無論它們是履行還是拒絕,因此您可以全面了解并行操作。

結論

所以你有它。Promise.allSettled()這是一種你從來不知道自己需要的便捷方法。

您不再需要僅用Promise.all()try/catch 來處理潛在的拒絕。您可以讓我們Promise.allSettled()為您處理所有這些事情,而只關注已解決的值。您的異步代碼將更加干凈且易于閱讀。

到此這篇關于如何在JavaScript中使用Promise.allSettled()的文章就介紹到這了,更多相關JavaScript使用Promise.allSettled()內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解JS數組Reduce()方法詳解及高級技巧

    詳解JS數組Reduce()方法詳解及高級技巧

    reduce 為數組中的每一個元素依次執(zhí)行回調函數,不包括數組中被刪除或從未被賦值的元素。接下來通過本文給大家分享JS數組Reduce()方法詳解及高級技巧,一起看看吧
    2017-08-08
  • VScode中配置JavaScript編譯環(huán)境的方法

    VScode中配置JavaScript編譯環(huán)境的方法

    這篇文章主要介紹了VSCODE中配置JavaScript編譯環(huán)境的方法,方式一 使用Node.js做為解釋器運行JS代碼 Node.js的安裝和配置,方式二使用VSCODE插件Code Runner運行JS代碼,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • 瀏覽器視頻幀操作方法?requestVideoFrameCallback()

    瀏覽器視頻幀操作方法?requestVideoFrameCallback()

    這篇文章主要介紹了瀏覽器視頻幀操作方法?requestVideoFrameCallback(),文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07
  • js編寫簡單的聊天室功能

    js編寫簡單的聊天室功能

    這篇文章主要為大家詳細介紹了js編寫簡單的聊天室功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • webpack4.x開發(fā)環(huán)境配置詳解

    webpack4.x開發(fā)環(huán)境配置詳解

    這篇文章主要介紹了webpack4.x開發(fā)環(huán)境配置方法,結合實例形式詳細分析了webpack4.x的具體安裝、項目創(chuàng)建、打包操作等相關問題與處理技巧,需要的朋友可以參考下
    2018-08-08
  • JS+CSS實現(xiàn)仿觸屏手機撥號盤界面及功能模擬完整實例

    JS+CSS實現(xiàn)仿觸屏手機撥號盤界面及功能模擬完整實例

    這篇文章主要介紹了JS+CSS實現(xiàn)仿觸屏手機撥號盤界面及功能模擬完整實例,可以實現(xiàn)逼真模擬手機撥號盤界面并實現(xiàn)點擊輸入對應號碼的功能,需要的朋友可以參考下
    2015-05-05
  • Jil,高效的json序列化和反序列化庫

    Jil,高效的json序列化和反序列化庫

    下面小編就為大家?guī)硪黄狫il,高效的json序列化和反序列化庫。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • javascript實現(xiàn)隨機讀取數組的方法

    javascript實現(xiàn)隨機讀取數組的方法

    這篇文章主要介紹了javascript實現(xiàn)隨機讀取數組的方法,涉及javascript隨機數及針對數組操作的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • JavaScript測試工具之Karma-Jasmine的安裝和使用詳解

    JavaScript測試工具之Karma-Jasmine的安裝和使用詳解

    Jasmine是一個Javascript的測試工具,在Karma上運行Jasmine可完成Javascript的自動化測試、生成覆蓋率報告等。本文不包含Jasmine的使用細節(jié),這幾天我會寫一篇Jasmine的入門文章,有興趣的朋友到時候可以看一下
    2015-12-12
  • 非常不錯的一個JS分頁效果代碼,值得研究

    非常不錯的一個JS分頁效果代碼,值得研究

    非常不錯的一個JS分頁效果代碼,值得研究...
    2007-06-06

最新評論