天天看點

try catch的簡單了解

定義和用法

try/catch/finally 語句用于處理代碼中可能出現的錯誤資訊。

錯誤可能是文法錯誤,通常是程式員造成的編碼錯誤或錯别字。也 可能是拼寫錯誤或語言中缺少的功能(可能由于浏覽器差異)。

try語句允許我們定義在執行時進行錯誤測試的代碼塊。

catch 語句允許我們定義當 try 代碼塊發生錯誤時,所執行的代碼塊。

finally 語句在 try 和 catch 之後無論有無異常都會執行。

注意: catch 和 finally 語句都是可選的,但你在使用 try 語句時必須至少使用一個。

提示: 當錯誤發生時, JavaScript 會停止執行,并生成一個錯誤資訊。使用 throw 語句 來建立自定義消息(抛出異常)。如果你将 throw 和 try 、 catch一起使用,就可以控制程式輸出的錯誤資訊。

文法

try {
    tryCode - 嘗試執行代碼塊
}
catch(err) {
    catchCode - 捕獲錯誤的代碼塊
} 
finally {
    finallyCode - 無論 try / catch 結果如何都會執行的代碼塊
}
           

參數值

參數 描述
tryCode 必須。檢查是否有錯誤的代碼塊。
err 必須(如果使用 catch)。指定局部變量應用的錯誤。該變量可以引用 Error 對象 (包含發生的錯誤資訊,如 "'addlert' 沒有定義")。如果異常通過 throw 語句建立 , 該 變量引用了為在throw語句中指定的對象 (檢視 "更多執行個體")
catchCode 可選。如果 try 語句發生錯誤執行的代碼塊。如果 try 語句沒發生錯誤該代碼不會執行。
finallyCode 可選。無論 try / catch 的結果如何都會執行。

嵌套使用:

function fn1(){
    try {
        fn2()
    } catch (error) {
        console.log(error) // 捕捉的是fn2的錯誤資訊
    }
}
function fn2(){
    try {
        fn3() 
    } catch (error) { // 捕捉的是fn3的錯誤資訊
        throw error // 抛出目前程式的錯誤資訊
    }
}
function fn3(){
    try {
        a
    } catch (error) {
       throw error // 抛出目前程式的錯誤資訊
    }
}

fn1();
// 運作結果:a is not defined
           

自定義輸出錯誤資訊,還是上面的例子

将fn2的throw error改成throw new Error(‘fn2 的異常資訊’);

将fn3的throw error改成throw new Error(‘fn3 的異常資訊’);

那麼運作結果: fn2 的異常資訊

fn2的throw error不變;

将fn3的throw error改成throw new Error(‘fn3 的異常資訊’);

那麼運作結果: fn3 的異常資訊

上面的代碼隻針對同步的程式有效,那麼異步的話要怎麼捕獲異常呢。接下來我們看下try catch 和異步結合使用

異步使用try catch

function api (){
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            const random = parseInt(Math.random()*10);
            if(random<5){
                reject('該數字小于5哦!')
            }
        },2000)
    })    
}

async function getApi(){
    try {
        await api()
    } catch (error) {
        console.log(error)
    }
}

getApi();  // 當随機數計算的結果小于5的時候,會抛出 “該數字小于5哦!”
           

上面的方法由于api()傳回的是Promise,是以調用的時候可以使用await等待api()執行. 程式中要是使用了await的話

對應的一定要使用async哦,使用了async的話,不管有沒有使用await程式的傳回結果都是promise;

async/await/promise的具體使用方法可以借鑒這篇文章:https://blog.csdn.net/sllailcp/article/details/78832343