簡體   English   中英

過早處理被拒絕的承諾有什么后果?

[英]What are the consequences of handling a rejected promise too early?

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

過早處理被拒絕的承諾會在承諾鏈的下游產生后果。

會有什么樣的后果? 在哪些情況下應避免及早處理拒收,在哪些情況下應優先處理拒收?

要理解的關鍵部分是 catch() 也返回一個承諾。

考慮以下示例。 由於中間的 catch 沒有返回值,但是 catch() 本身返回一個 promise,最終的 catch 永遠不會觸發,最后的 then() 確實......從先前的 catch() 承諾接收undefined的結果

 const func = (val) => { return new Promise((resolve,reject)=> { // not really asynchronous, only contrived for demo val === 1 ? resolve(val) : reject('Oooops') }).catch(err=> {console.log('Err in func catch:', err)}) } func(200).then(res=> console.log('Then res=', res))// receives undefined from prior catch .catch(err=> console.log('Never gets called'))

因此,您可以根據首選邏輯在這里做一些不同的事情。

您可以從中間 catch 返回不同的預期值並在最后的 then 中查找該值,或者返回另一個被拒絕的承諾或拋出的錯誤以在最終的 catch() 中捕獲。

或者...如果中間捕獲沒有攔截它的價值,則根本不要使用它。


使用中間捕獲的示例用例是:

請求 url 的 map() 傳遞通過一個函數,該函數將請求承諾返回到您的地圖數組,但如果不是全部成功,您就可以了。

如果沒有中間捕獲攔截,整個鏈將在第一個錯誤請求時中斷。 相反,您可以從中間捕獲中返回一些您在Promise.all().then()過濾掉的Promise.all().then()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM