首頁 >web前端 >js教程 >如何最好地處理 TypeScript 中 Async/Await Try...Catch 區塊中的錯誤?

如何最好地處理 TypeScript 中 Async/Await Try...Catch 區塊中的錯誤?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-07 02:13:16963瀏覽

How to Best Handle Errors in Async/Await Try...Catch Blocks in TypeScript?

使用Async/Await 的Try...Catch 區塊的正確語法

在TypeScript 中使用方便的Async/Await 功能時,出現問題當變數等待回應時,會出現關於變數宣告的問題。傳統上,它們必須在 try...catch 區塊之外聲明以便稍後使用,如下所示:

let createdUser;
try {
    createdUser = await this.User.create(userInfo);
} catch (error) {
    console.error(error);
}

console.log(createdUser);

有人建議最好避免將業務邏輯放置在 try 區塊中。然而,使用建議的方法需要在區塊外聲明等待的變量,這可能很麻煩。

錯誤處理的最佳實踐

這確實被認為是最佳實踐避免在try 主體中放置多行業務邏輯,以確保捕獲由值引起的所有異常。更全面的方法如下:

try {
    const createdUser = await this.User.create(userInfo);

    console.log(createdUser);
    // Business logic goes here
} catch (error) {
    console.error(error); // Exception from creation or business logic
}

選擇性錯誤處理的替代方案

如果您只想捕捉和處理源自Promise:

  1. 在外部宣告變數並分支:這涉及到根據是否發生異常進行分支,如下所示:
let createdUser; // Or use 'var' inside the block
try {
    createdUser = await this.User.create(userInfo);
} catch (error) {
    console.error(error); // Exception from creation
}

if (createdUser) { // User was created successfully
    console.log(createdUser);
    // Business logic goes here
}
  1. 測試異常類型:測試捕獲的異常它的具體類型並處理或重新拋出它相應地:
try {
    const createdUser = await this.User.create(userInfo);

    console.log(createdUser);
    // Business logic goes here
} catch (error) {
    if (error instanceof CreationError) {
        console.error(error); // Exception from creation
    } else {
        throw error;
    }
}
  1. 將then與回呼一起使用: 這種方法使用兩個回呼而不是 try/catch,提供了最簡單且最推薦的解決方案:
await this.User.create(userInfo).then(createdUser => {
    // User was created successfully
    console.log(createdUser);
    // Business logic goes here
}, error => {
    console.error(error); // Exception from creation
});

以上是如何最好地處理 TypeScript 中 Async/Await Try...Catch 區塊中的錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn