如何在 JavaScript 中使用 Promise.allSettled()_第1頁
如何在 JavaScript 中使用 Promise.allSettled()_第2頁
如何在 JavaScript 中使用 Promise.allSettled()_第3頁
如何在 JavaScript 中使用 Promise.allSettled()_第4頁
如何在 JavaScript 中使用 Promise.allSettled()_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

你是否曾經(jīng)在JavaScript中使用過Promise,當(dāng)有人拒絕了它,一切都被打亂時(shí),你感到很沮喪?你寫過基于Promise的代碼,一切都很正常,然后一個(gè)小小的Promise被拒絕了,整個(gè)鏈條都斷了。你的代碼戛然而止,你想知道為什么JavaScript不能忽略這個(gè)小問題,繼續(xù)它的快樂之路。這里有一些好消息給你。promise.allSettled()是一個(gè)改變游戲規(guī)則的工具,它等待所有承諾被解決(解決或拒絕),并允許你對(duì)結(jié)果采取行動(dòng)。沒有更多的承諾鏈被打破或被拒絕而不被解決。只有純粹的、不摻雜任何雜質(zhì)的幸福承諾。潛心研究這個(gè)鮮為人知但非常有用的Promise方法,看看它能在多大程度上簡(jiǎn)化你的異步JavaScript代碼。什么是Promise.allSettled()?你想要使用JavaScript的Promise.allSettled()方法,但不太確定它是如何工作的或者為什么要使用它?不用擔(dān)心,我已經(jīng)為你提供了保障。Promise.allSettled()等待你給它的所有承諾得到解決,意味著解決或拒絕。然后,它返回一個(gè)對(duì)象數(shù)組,其中包含每個(gè)承諾的狀態(tài)和值或原因。當(dāng)你希望確保已完成多個(gè)異步任務(wù),但不一定關(guān)心其中某些任務(wù)是否失敗時(shí),這非常有用。例如,假設(shè)你有三個(gè)返回Promise的API調(diào)用,并且你希望從成功的調(diào)用中獲取所有數(shù)據(jù),即使其中一個(gè)調(diào)用失敗。你可以這樣做:Promise.allSettled([apiCall1(),apiCall2(),apiCall3()]).then((results)=>{});這將運(yùn)行所有三個(gè)API調(diào)用,并且.then()在它們?nèi)拷鉀Q后將調(diào)用回調(diào)。結(jié)果數(shù)組將包含三個(gè)對(duì)象:每個(gè)承諾一個(gè),其狀態(tài)為“已完成”和數(shù)據(jù),或者“已拒絕”和錯(cuò)誤。我們可以過濾以獲取成功的調(diào)用,然后繼續(xù)使用該數(shù)據(jù)。要記住的關(guān)鍵事項(xiàng)是:Promise.allSettled()等待所有輸入承諾解決并返回其結(jié)果。已解決意味著已解決(已實(shí)現(xiàn))或已拒絕。它返回一個(gè)對(duì)象數(shù)組,其中包含每個(gè)輸入承諾的狀態(tài)和值/原因。即使有人拒絕,它也允許處理成功的承諾。問題與Promise.all()解決方案Promise.allSettled()Promise.all()當(dāng)你想要等待多個(gè)Promise完成并獲取所有已解析值的數(shù)組時(shí),這非常有用。但它有一個(gè)主要缺點(diǎn):如果任何一個(gè)承諾被拒絕,整個(gè)Promise.all()承諾都會(huì)立即被拒絕。在某些情況下這可能會(huì)出現(xiàn)問題。例如,假設(shè)你向三個(gè)不同的后端服務(wù)發(fā)出請(qǐng)求,只要其他兩個(gè)服務(wù)成功,你并不真正關(guān)心其中一個(gè)是否失敗。使用時(shí)Promise.all(),單個(gè)被拒絕的Promise將拒絕整個(gè)組,并且你會(huì)錯(cuò)過其他Promise的成功響應(yīng)。幸運(yùn)的是,有一個(gè)簡(jiǎn)單的解決方案:Promise.allSettled()。其工作原理與此類似,Promise.all()但如果任何Promise拒絕,它不會(huì)立即拒絕,而是等待所有Promise解決(解決或拒絕),然后返回一個(gè)對(duì)象數(shù)組,其中包含每個(gè)Promise的狀態(tài)和值/原因。例如:Promise.allSettled([Promise.resolve(1),Promise.reject(newError("2")),Promise.resolve(3),]).then((results)=>{//resultsisanarrayof://{status:"fulfilled",value:1}//{status:"rejected",reason:Error}//{status:"fulfilled",value:3}});正如你所看到的,即使第二個(gè)承諾被拒絕,我們?nèi)匀粡钠渌兄Z中獲得解析值。這使你能夠優(yōu)雅地處理拒絕,而不會(huì)錯(cuò)過任何成功的回復(fù)。Promise.allSettled()在這些類型的情況下提供了更大的靈活性。你可以全面了解所有承諾,無論是否有一些拒絕,因此你仍然有機(jī)會(huì)利用任何已解決的值并適當(dāng)處理拒絕。因此,下次當(dāng)你需要等待多個(gè)Promise但又不能因?yàn)榫芙^而錯(cuò)過任何已解決的值時(shí),請(qǐng)務(wù)必使用Promise.allSettled()!這是對(duì)PromiseAPI的一個(gè)非常有用的補(bǔ)充。常見問題Promise.allSettled()會(huì)Promise.allSettled()減慢我的代碼速度嗎?并不真地。Promise.allSettled()只需等待你傳遞給它的所有承諾通過履行或拒絕來解決。它不會(huì)做任何其他會(huì)影響性能的事情。我還能發(fā)現(xiàn)錯(cuò)誤嗎Promise.allSettled()?是的,你絕對(duì)可以!Promise.allSettled()將為你提供每個(gè)承諾的結(jié)果,無論是履行還是拒絕。對(duì)于任何被拒絕的Promise,你都會(huì)得到拒絕的原因,通常是錯(cuò)誤。.catch()你可以在調(diào)用的處理程序中捕獲這些錯(cuò)誤Promise.allSettled()。我什么時(shí)候應(yīng)該使用Promise.allSettled()vs

Promise.all()?Promise.allSettled()當(dāng)你想要并行運(yùn)行多個(gè)Promise,但不希望單個(gè)被拒絕的Promise導(dǎo)致整個(gè)組拒絕時(shí)使用。例如,如果你從多個(gè)第三方API獲取數(shù)據(jù),則一個(gè)API被拒絕的承諾不應(yīng)阻止你從其他API獲取數(shù)據(jù)。Promise.all()當(dāng)你想要并行運(yùn)行Promise但需要它們?nèi)砍晒ν瓿刹拍苁勾a繼續(xù)運(yùn)行時(shí)使用。例如,如果你需要從兩個(gè)API獲取數(shù)據(jù)以在頁面上顯示,則你希望在呈現(xiàn)數(shù)據(jù)之前滿足這兩個(gè)承諾。我能得到已達(dá)成的承諾的結(jié)果嗎?是的!Promise.allSettled()返回一個(gè)對(duì)象數(shù)組,其中包含每個(gè)承諾的狀態(tài)和值/原因。例如:Promise.allSettled([Promise.resolve(1),Promise.reject(newError("2")),Promise.resolve(3),]).then((results)=>{console.log(results);/*[{status:"fulfilled",value:1},{status:"rejected",reason:Error:2},{status:"fulfilled",value:3}]*/});你將獲得有關(guān)所有承諾的信息,無論它們是履行還是拒絕,因此你可以全面了解并行操作。結(jié)論所以

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論