国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

再見 try/catch,我有更好的選擇了!

開發 前端
寫 JavaScript 的人都知道,try/catch 雖然是處理異步錯誤的“正道”,但一旦多起來,整個代碼就開始變得臃腫、重復、難讀。

前端異步代碼里的錯誤處理,大多數人第一反應還是 try/catch。它能解決問題,但寫多了難免覺得啰嗦:嵌套多、邏輯被打斷,讀起來也不太舒服。

所以這幾年,越來越多項目開始嘗試別的方式——寫法更輕,結構更清晰。

這篇文章就來聊聊三種替代方案:一個語言層的提案,一個可以自己封裝的小工具,還有一個現成的社區庫。選好用的方式,能讓錯誤處理簡單不少。

傳統 try/catch 的痛點

寫 JavaScript 的人都知道,try/catch 雖然是處理異步錯誤的“正道”,但一旦多起來,整個代碼就開始變得臃腫、重復、難讀。

你可能見過這種寫法:

try {
  const data = await fetchUser();
  doSomething(data);
} catch (e) {
  console.error('出錯了', e);
}

寫一兩個還好,但如果你有十幾個異步調用,每個都要包一層 try/catch,不僅煩,而且破壞代碼結構。不少人甚至為了偷懶,直接不處理錯誤或者一把包住:

try {
  // 一大堆 await
} catch (e) {
  // 一個錯誤搞不清是哪里來的
}

有沒有更好的寫法?有,而且不止一種。

語言層面的嘗試:try 操作符提案

一個值得關注的思路來自一個全新的語言提案,它設想在 JavaScript 中引入一種新的 try 表達式語法,它不是語句,而是一個表達式。

提案地址:https://github.com/arthurfiorette/proposal-try-operator

const [ok, err, result] = try await fetchUser();

這個寫法的意思很明確:

  • 如果成功,ok 是 true,result 有值;
  • 如果失敗,ok 是 false,err 是錯誤對象。

這樣一來,不僅避免了冗長的 try/catch,還天然具備結構化的錯誤處理方式。

const [ok, err, user] = await safeAwait(fetchUser());

if (!ok) {
  console.error('請求失敗:', err);
  return;
}

console.log('用戶數據:', user);

是不是很像 Go 的 val, err := fn(),或者 Rust 的 Result?這就是提案的核心:讓錯誤處理從控制流轉向值表達式。

雖然這個提案還在 Stage 1,離真正進入 JavaScript 還有一段距離,但它提出了一種很有前景的思路:

錯誤不一定要“捕獲”,也可以像值一樣被“解構”。

自定義封裝:手寫一個 safeAwait

語言層還沒進化?那我們就自己造個輪子。

一個常見的思路是:將 Promise 的執行結果封裝成一個三元組 [ok, err, data],結構明確,邏輯清晰。來看實現:

export type SafeAwaitResult<T> =
  | [true, null, T]
  | [false, Error, null];

exportasyncfunction safeAwait<T>(promise: Promise<T>): Promise<SafeAwaitResult<T>> {
try {
    const result = await promise;
    return [true, null, result];
  } catch (err: any) {
    const error = err instanceofError ? err : newError(String(err));
    return [false, error, null];
  }
}

使用時非常直觀:

const [ok, err, user] = await safeAwait(fetchUser());

if (!ok) {
  console.error('請求失敗:', err);
  return;
}

console.log('用戶數據:', user);

這套封裝的好處是顯而易見的:

  • 語義清晰:ok 表示狀態,err 和 data 結構穩定
  • 無 try/catch:邏輯更線性,閱讀友好
  • 類型明確:配合泛型推導,IDE 提示清晰
  • 易于復用:在整個項目中統一處理異步異常

而且你還可以鏈式使用,避免回到嵌套地獄:

const [ok1, err1, user] = await safeAwait(fetchUser());
if (!ok1) return handle(err1);

const [ok2, err2, posts] = await safeAwait(fetchPosts(user.id));
if (!ok2) return handle(err2);

renderDashboard(user, posts);

這種寫法非常適合搭配中間件、hooks 或服務層封裝,逐漸成為許多項目的標準做法。

用庫更香:await-to-js 一步到位

如果你不想自己封裝,還有一個現成、穩定的庫可以用:await-to-js

它的設計初衷和 safeAwait 類似,把 Promise 的結果轉成 [error, result] 形式:

npm install await-to-js

使用方法如下:

import to from 'await-to-js';

const [err, data] = await to(fetchUser());

if (err) return handle(err);

render(data);

如果你的項目希望快速接入結構化的錯誤處理,不妨試試這個庫。

總結對比:三種錯誤處理方案

方法

優點

缺點

適合場景

try/catch

原生支持,語義明確

冗長、嵌套、難組合

控制分支復雜的邏輯

safeAwait

(自定義)

簡潔清晰,類型安全,可組合

需要維護封裝結構

中大型項目,統一風格

await-to-js

(第三方庫)

即裝即用,社區成熟

多一個依賴

快速落地,團隊協作

函數式時代的錯誤處理該進化了

在今天,繼續用 try/catch 處理每一個異步錯誤,已經有些過時。無論是語言層面的提案,還是我們可以自己實現的封裝,甚至是社區提供的優秀工具,目的都是一樣的:讓錯誤處理變得更清晰、更優雅、更現代。

再見了,重復的 try/catch,寫更清爽的代碼,從現在開始。

責任編輯:趙寧寧 來源: 前端充電寶
相關推薦

2020-06-15 08:12:51

try catch代碼處理器

2025-05-19 10:04:48

2024-10-09 08:48:52

2023-08-07 11:47:53

Poetry工具軟件包

2020-08-24 13:35:59

trycatchJava

2025-02-12 12:00:00

前端try-catchJavaScrip

2020-09-27 07:48:40

不用try catch

2020-12-29 10:36:34

互聯網數據技術

2023-05-26 01:05:10

2025-12-01 01:33:00

2024-12-02 11:07:24

Java代碼機制

2020-05-29 08:14:49

代碼Try-Catch程序員

2024-05-24 08:59:15

2021-01-05 07:54:55

事項trycatch

2009-12-02 19:56:33

PHP中try{}ca

2023-09-07 07:53:21

JavaScriptGoRust

2021-03-31 11:52:24

try-catch-fJava代碼

2022-03-01 07:37:30

MySQL場景框架

2021-12-08 08:28:34

工具 offer業務

2024-06-25 10:37:11

點贊
收藏

51CTO技術棧公眾號

久草免费在线| 亚洲在线成人精品| 欧美猛交免费看| 麻豆av在线导航| 欧美日韩中文字幕综合视频| 色综合小说天天综合网| 91首页免费视频| 日韩精品一区二区免费| 日本不卡一区二区三区高清视频| 亚洲xxxx在线| 久久精品免费一区二区三区| 国产精品偷伦免费视频观看的| 黑色丝袜福利片av久久| 亚洲男女性事视频| 国产极品在线视频| 日韩高清不卡一区| 久久久久久国产精品一区| 亚洲最大福利网站| 我爱我色成人网| 亚洲影院色无极综合| 91精品国产91久久久久久密臀 | 亚洲午夜免费电影| 一区二区不卡视频| 亚洲一区欧美二区| 欧洲亚洲一区| 中文字幕久久午夜不卡| 一区二区三区四区欧美| 欧美亚洲精品一区| 亚洲综合精品| 欧美韩一区二区| www.亚洲资源| 日韩制服丝袜av| 国产精品欧美风情| 麻豆精品一区| 91精品国产色综合久久不卡电影| 国产乱码精品一区二三赶尸艳谈| 欧美丰满嫩嫩电影| 国内外免费激情视频| 亚洲一卡二卡三卡四卡| 欧美激情亚洲天堂| 国产电影一区在线| 亚洲va欧美va国产综合剧情| 日韩成人综合网站| 福利精品视频在线| 成年人福利视频| 亚洲在线黄色| 日韩欧美视频一区二区三区四区| 久久在线播放| 国产精品视频网站| 欧美激情aaaa| 久久伊人蜜桃av一区二区| 日韩av123| 在线免费观看h| 羞羞视频在线免费国产| 日本高清免费电影一区| 天堂√在线观看一区二区| 日本三级在线播放完整版| 91精品国产自产在线老师啪| 91tv精品福利国产在线观看| 99视频在线| 成人性生交大片免费| а√最新版天堂中文在线| 精品国产91乱码一区二区三区| 最近高清中文在线字幕在线观看| 国产精品嫩草影院久久久| 亚洲日本一区二区三区| 免费看欧美女人艹b| 日本不卡中文字幕| 国产精品996| 欧美韩国日本在线| 欧美精品丝袜中出| 欧美丝袜激情| 青青草视频在线免费播放| 91精品国产综合久久久久| 精品视频97| 成人国产一区二区| 国产欧美一区| 69堂成人精品免费视频| 毛片在线播放网址| 日韩欧美第一页| 怡红院成人在线| 久久久久久国产精品美女| 一本久久综合| 性视频一区二区三区| 国产日韩在线精品av| 一区二区三区四区激情| 国产精品美女久久久久| 中文字幕中文字幕一区| 欧美午夜精彩| 精品高清久久| 国产精品巨作av| 亚洲精品a区| 欧美国产一级| 99欧美视频| 日本一二区不卡| 欧洲杯半决赛直播| 亚洲精品久久久| 天堂综合网久久| 日韩欧美高清| 日韩av密桃| 亚洲图片在线| 日本不卡视频在线观看| 精品一区二区三区在线视频| 国产精品香蕉一区二区三区| 亚洲国产电影在线观看| 欧美性xxxx18| 在线色欧美三级视频| 欧美日韩国产不卡| 国产精品成人网| 日韩av电影免费观看高清完整版| 青草国产精品| vam成人资源在线观看| 国内外激情在线| 亚洲欧美日本免费| www亚洲成人| 欧美大尺度做爰床戏| 日韩av资源在线| 欧美国产亚洲一区| 国产精品50p| 国模无码视频一区二区三区| 男人的天堂视频在线| 欧美一区二区综合| 婷婷四月色综合| 99久久精品免费看国产四区| 性日韩欧美在线视频| 97久久精品人人澡人人爽缅北| 天天综合日日夜夜精品| 欧美精品一卡| 国产一区三区在线播放| 成人在线视频网| 亚洲国产一区二区三区青草影视| 国产精品高潮呻吟久久久久| 日韩中文字幕二区| 欧美情侣性视频| 亚洲国产精品国自产拍av| 亚洲狼人综合| 成人性视频欧美一区二区三区| 精品久久久av| 国产丝袜欧美中文另类| 亚洲国产aⅴ精品一区二区| 人妻丰满熟妇av无码区app| 欧美激情伊人电影| 亚洲人成网站在线| 成人免费电影网址| 国产精品毛片一区二区三区四区| 999热视频在线观看| 5月丁香婷婷综合| 久久精品99国产精品| 成人不卡视频| 亚洲精品自拍网| 国产精选久久久久久| 在线观看91精品国产入口| 免费视频一区二区三区在线观看| 色婷婷av在线| 男人天堂a在线| 97视频免费在线观看| 欧美日韩国产在线看| 99热精品在线观看| 中文字幕资源网在线观看免费| 97av视频在线观看| 国产精品99久久久久久久久| 精品1区2区3区| 国产成人8x视频一区二区| 最新国产一区二区| 噜噜噜在线观看播放视频| 色视频一区二区三区| 最新中文字幕亚洲| 亚洲午夜在线视频| 巨乳诱惑日韩免费av| 99久久综合国产精品二区| ckplayer中文字幕| 免费精品视频一区二区三区| 在线成人激情视频| 亚洲国产精品久久久男人的天堂| 久久精品人人做人人爽电影蜜月| 欧美风情在线视频| 中日韩免费毛片| 亚洲电影网站| 久久久久久久香蕉网| 欧美日韩一区 二区 三区 久久精品 | 国产欧美精品在线播放| 欧美日韩国产在线播放网站| 韩国v欧美v日本v亚洲v| 91精品啪在线观看国产爱臀| 伦理片一区二区三区| 亚洲高潮无码久久| 国产一区二区在线免费视频| 亚洲欧洲自拍偷拍| 欧美性xxxx在线播放| 北条麻妃一区二区三区| 亚洲第一偷拍| 国产精品成人3p一区二区三区| 韩国福利在线| 91香蕉视频污版| 午夜精品美女久久久久av福利| 久久久久久久久网站| 精品国产伦一区二区三区观看方式| 国产精品国产三级国产三级人妇 | 国产亚洲精品中文字幕| 亚洲一区黄色|