




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 豫章師范學(xué)院《油畫靜物技法與表現(xiàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 珠海格力職業(yè)學(xué)院《藏文文法上》2023-2024學(xué)年第二學(xué)期期末試卷
- 遼寧石化職業(yè)技術(shù)學(xué)院《語文學(xué)科教育論》2023-2024學(xué)年第二學(xué)期期末試卷
- 西安歐亞學(xué)院《數(shù)據(jù)分析與可視化》2023-2024學(xué)年第二學(xué)期期末試卷
- 南京工業(yè)大學(xué)《建筑防火設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 西安科技大學(xué)高新學(xué)院《汽車發(fā)展史》2023-2024學(xué)年第二學(xué)期期末試卷
- 遼寧工程技術(shù)大學(xué)《資產(chǎn)評(píng)估學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 四川航天職業(yè)技術(shù)學(xué)院《嵌入式系統(tǒng)設(shè)計(jì)與開發(fā)》2023-2024學(xué)年第二學(xué)期期末試卷
- 合肥信息技術(shù)職業(yè)學(xué)院《建筑類專業(yè)導(dǎo)論》2023-2024學(xué)年第二學(xué)期期末試卷
- 南華大學(xué)船山學(xué)院《素描半身帶手及全身像實(shí)踐教學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 穩(wěn)定性冠心病診斷與治療指南
- DL-T5704-2014火力發(fā)電廠熱力設(shè)備及管道保溫防腐施工質(zhì)量驗(yàn)收規(guī)程
- JT-T-610-2004公路隧道火災(zāi)報(bào)警系統(tǒng)技術(shù)條件
- 初中英語比較級(jí)和最高級(jí)專項(xiàng)練習(xí)題含答案
- 大壩安全監(jiān)測(cè)系統(tǒng)驗(yàn)收規(guī)范
- 2024年南京鐵道職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫及答案解析
- 校園超市經(jīng)營投標(biāo)方案(技術(shù)方案)
- 康復(fù)醫(yī)院建筑設(shè)計(jì)標(biāo)準(zhǔn)
- 社會(huì)穩(wěn)定風(fēng)險(xiǎn)評(píng)估 投標(biāo)方案(技術(shù)方案)
- 高層建筑火災(zāi)撲救面臨問題及對(duì)策
- JC-T 738-2004水泥強(qiáng)度快速檢驗(yàn)方法
評(píng)論
0/150
提交評(píng)論