錯誤處理是軟體開發的重要方面,可確保應用程式保持穩定且使用者友好。然而,管理 JavaScript 中的錯誤可能既麻煩又耗時。這就是 Untry 的用武之地——一個簡化錯誤處理的輕量級函式庫。
JavaScript 錯誤處理依賴 try-catch 區塊,這可能會變得笨拙且難以管理,特別是在處理嵌套非同步呼叫時。這種方法可以導致:
過於複雜且深層嵌套的 try-catch 區塊會造成維護噩夢。嘗試使用多層 try-catch 語句來處理錯誤會導致程式碼混淆、錯誤屏蔽和吞噬異常。非同步代碼和回調加劇了問題。
讓我們來看一個範例,了解 JavaScript 中的 try-catch 錯誤處理有多複雜。採用取得產品詳細資訊的電子商務 API 端點:
app.get('/product/:id', async (req, res) => { try { const product = await fetchProduct(req.params.id) const reviews = await fetchReviews(req.params.id) res.json({ product, reviews }) } catch (error) { res.status(500).send('Something went wrong!') } });
如果 fetchProduct 或 fetchReviews 失敗,它將傳回相同的通用回應。
讓我們以一種可以單獨處理每個非同步呼叫的錯誤的方式進行重構,並決定在每種情況下做什麼:
app.get('/product/:id', async (req, res) => { let product let reviews let productError let reviewsError // product try { product = await fetchProduct(req.params.id) } catch (error) { productError = error } if (productError) { res.status(500).json({ error: productError }) return } // reviews try { reviews = await fetchReviews(req.params.id) } catch (error) { reviewsError = error } if (reviewsError) { res.status(500).json({ error: reviewsError }) return } // final response res.json({ product, reviews }) })
現在程式碼會單獨處理每種情況,儘管它看起來可讀性較差,因此可維護性較差。
讓我們可以使用 Untry 單獨處理每個情況,而不犧牲太多可讀性:
app.get('/product/:id', async (req, res) => { let [product, productError] = await untry(() => fetchProduct(req.params.id)) if (productError) { res.status(500).json({ error: productError }) return } let [reviews, reviewsError] = await untry(() => fetchReviews(req.params.id)) if (reviewsError) { res.status(500).json({ error: reviewsError }) return } res.json({ product, reviews }) })
Untry 是一個輕量級的 JavaScript 函式庫,靈感來自 Go 的錯誤處理哲學。這種方法消除了 try-catch 流程。允許使用錯誤作為值而不是異常進行明確錯誤管理。
Untry 執行一個函數,捕獲內部的任何錯誤,並傳回一個包含結果值和任何拋出的錯誤的陣列。這是一個管理錯誤的簡單解決方案,使您的程式碼更加健壯、可讀和可維護。
import untry from 'untry'; let [value, error] = untry(() => { // code that might throw an error });
NPM 套件:https://www.npmjs.com/package/untry
以上是使用 Untry 簡化 JavaScript 中的錯誤處理的詳細內容。更多資訊請關注PHP中文網其他相關文章!