公交车上荫蒂添的好舒服的电影-公用玩物(np双xing总受)-公用小荡货芊芊-公与妇仑乱hd-攻把受做哭边走边肉楼梯play-古装一级淫片a免费播放口

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

再見 Try/Catch,在 TypeScript 中更優雅地處理錯誤

admin
2025年1月26日 23:15 本文熱度 489

前言

大家好,我是倔強青銅三。是一名熱情的軟件工程師,我熱衷于分享和傳播IT技術,致力于通過我的知識和技能推動技術交流與創新,歡迎關注我,微信公眾號:倔強青銅三。歡迎點贊、收藏、關注,一鍵三連?。。?/p>

用“錯誤捕獲”替代 Try/Catch:TypeScript 錯誤處理新思路

在開發 TypeScript 應用程序時,你是否覺得傳統的 Try/Catch 錯誤處理方式有些繁瑣?最近,我在 YouTube 上看到一個有趣的視頻,介紹了一種更簡潔的錯誤處理方法。今天,我將分享視頻中的核心內容,并結合自己的理解進行總結。

定義 getUser 函數用于錯誤處理

首先,我們定義一個簡單的 getUser 函數來演示錯誤處理。該函數根據給定的 id 返回一個用戶對象。

const wait = (duration: number) => {

  return new Promise((resolve) => {

    setTimeout(resolve, duration);

  });

};


const getUser = async (id: number) => {

  await wait(1000);


  if (id === 2) {

    throw new Error("404 - User does not exist");

  }


  return { id, name: "Noah" };

};


const user = await getUser(1);


console.log(user); // { id: 1, name: "Noah" }

使用 try/catch 進行錯誤處理

將上述代碼改寫為使用 try/catch 的形式,代碼如下:

const wait = (duration: number) => {

  ...

};


const getUser = async (id: number) => {

  ...

};


try {

  const user = await getUser(1);

  console.log(user); // { id: 1, name: "Noah" }

} catch (error) {

  console.log("There was an error");

}

try/catch 的問題 ①:捕獲了 try 塊內的所有錯誤

以下代碼存在問題。即使只是一個拼寫錯誤,控制臺也會顯示“There was an error”,而我只想捕獲 getUser 中發生的錯誤。

const wait = (duration: number) => {

  ...

};


const getUser = async (id: number) => {

  ...

};


try {

  const user = await getUser(1);

  console.log(usr); // ← 拼寫錯誤

  // ... (大量代碼)

} catch (error) {

  console.log("There was an error");

}

try/catch 的問題 ②:使用 let 的陷阱

嘗試使用 let 解決問題,代碼如下:

const wait = (duration: number) => {

  ...

};


const getUser = async (id: number) => {

  ...

};


let user;


try {

  user = await getUser(1);

  // ... (大量代碼)

} catch (error) {

  console.log("There was an error");

}


console.log(usr); // ← ReferenceError: Can't find variable: usr

雖然拼寫錯誤引發了實際錯誤,但這段代碼仍不理想,因為可能會意外重新定義 user 對象,例如:

const wait = (duration: number) => {

  ...

};


const getUser = async (id: number) => {

  ...

};


let user;


try {

  user = await getUser(1);

  // ... (大量代碼)

} catch (error) {

  console.log("There was an error");

}


user = 1; // ← ? 可能引發錯誤

解決方案

使用 catchError 函數可以更簡潔、更易讀地處理錯誤。此外,user 變量是不可變的,不會引發意外錯誤。

const wait = (duration: number) => {

  ...

};


const getUser = async (id: number) => {

  ...

};


const catchError = async <T>(promise: Promise<T>): Promise<[undefined, T] | [Error]> => {

  return promise

    .then((data) => {

      return [undefined, data] as [undefined, T];

    })

    .catch((error) => {

      return [error];

    });

};


const [error, user] = await catchError(getUser(1));


if (error) {

  console.log(error);

}


console.log(user);

如果你對這種模式是否實用有疑問,可以參考視頻中的詳細解釋。


作者:倔強青銅三
鏈接:https://juejin.cn/post/7464607408708468790
來源:稀土掘金
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

該文章在 2025/2/5 17:00:15 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产视频一区二区三区四区 | 精品偷自拍另类在线观 | 国产午夜男女爽爽爽爽爽视频 | 成人av在线观看网站一区二区 | 精品日韩传电影 | 精品人妻在线视频一区二区三区 | 91欧洲亚洲中日韩在线观看 | 2025欧美亚洲日韩制服 | 成人小说亚洲一区二区三区 | 国产极品粉嫩美女在线播放 | 国产欧美日本亚洲精品五区 | 国产精品福利自产拍在线观看 | 国产精品高清无码在线观看 | 国产亚洲精久久久久久无码苍井空 | 国产亚洲日韩网曝欧美台湾 | 国产福利在线观看永久视频 | 99久久国产宗和精品1上 | heyzo无码一区综合在线播放 | 精品熟妇av一区二区三区四区 | 成人无码av片在线观看蜜桃 | 国产在线你懂的网址深夜福利 | 高清无码爆乳护士在线播放 | 国产蜜桃tv一区二区无码 | 国产美女精品自在线拍免费 | 国产成人免费av一区二区 | 国产精品日日做人人爱 | 国产午夜成人无码免费 | 国产日韩精品中文字无码樱花 | 国产精品无码素人福利免费 | 国产精品成人一区二区不卡 | 国产成人精品三级在线 | 国产午夜乱子伦一区二区 | 18黑白丝水手服自慰喷水 | 国产v片精品在线播放 | 国产在线观看av一 | 国产丝袜精品丝袜久久 | av在线免费观看 | 国产激情视频在线观看免费播放 | 国产美女裸舞久久福利 | av麻豆不卡 | 国外免费人妖网视频在线观 |