Node.js 錯(cuò)誤和異常

2018-01-12 19:32 更新

錯(cuò)誤處理是所有應(yīng)用程序的重要組成部分。要拋出異常,請(qǐng)使用JavaScript的throw  關(guān)鍵字。在JavaScript中,通常使用 Error 對(duì)象和消息來(lái)表示錯(cuò)誤。你拋出這個(gè)錯(cuò)誤,以表示錯(cuò)誤情況:

<p>The code above generates the following result.</p>
function a() {
    throw new Error("Something bad happened!");
}
a();
錯(cuò)誤拋出結(jié)果

捕獲異常

你可以使用try/catch塊捕獲異常,如在其他語(yǔ)言中看到的:

function a () {
    throw new Error("Something bad happened!");
}
try {
    a();
} catch (e) {
    console.log("I caught an error: " + e.message);
}
console.log("program is still running");

這個(gè)程序的輸出是:
I caught an error: Something bad happened! program is still running

finally關(guān)鍵字

為了捕獲異常,你可以使用catch關(guān)鍵字。對(duì)于要運(yùn)行的代碼,無(wú)論是否捕獲到異常,都可以使用finally關(guān)鍵字。下面的代碼顯示了一個(gè)簡(jiǎn)單的例子來(lái)演示這個(gè)。

try { 
   console.log("About to throw an error"); 
   throw new Error("Error thrown"); 
} catch (e) { 
   console.log("I will only execute if an error is thrown"); 
   console.log("Error caught: ", e.message); 
} finally { 
   console.log("I will execute irrespective of an error thrown"); 
} 

catch部分只有在拋出錯(cuò)誤時(shí)才執(zhí)行。finally部分仍然執(zhí)行,盡管在try部分中拋出了任何錯(cuò)誤。

注意

這種異常處理方法非常適用于同步JavaScript。對(duì)于異步JavaScript,我們應(yīng)該處理回調(diào)中的錯(cuò)誤。

setTimeout(function () { 
    try { 
        console.log("About to throw an error"); 
        throw new Error("Error thrown"); 
    } catch (e) { 
        console.log("Error caught!"); 
    } 
}, 1000); 

對(duì)于上面的代碼,我們不能告訴代碼外面的錯(cuò)誤。考慮一個(gè)簡(jiǎn)單的getConnection函數(shù)回調(diào)我們需要在成功連接后調(diào)用。

function getConnection(callback) { 
    var connection; 
    try { 
       throw new Error("connection failed"); 
       // Notify callback that connection succeeded? 
    } catch (error) { 
       // Notify callback about error? 
    } 
} 

我們需要通知回調(diào)關(guān)于成功和失敗。這就是為什么Node.js有一個(gè)約定,如果有錯(cuò)誤,調(diào)用回調(diào)的第一個(gè)參數(shù)的錯(cuò)誤。如果沒(méi)有錯(cuò)誤,我們回調(diào)錯(cuò)誤設(shè)置為null。Node.js的getConnection函數(shù)將類似于下面的內(nèi)容。

function getConnection(callback) { /*m.o2fo.com*/
    var connection; 
    try {
       // Lets assume that the connection failed 
       throw new Error("connection failed");
       // Notify callback that connection succeeded?
       callback(null, connection); 
    } catch (error) {
       // Notify callback about error? 
       callback(error, null); 
    } 
} 
// Usage 
getConnection(function (error, connection) { 
    if (error) {
       console.log("Error:", error.message); 
    } else {
       console.log("Connection succeeded:", connection); 
    } 
}); 

將錯(cuò)誤作為第一個(gè)參數(shù)確保錯(cuò)誤檢查的一致性。這是所有具有錯(cuò)誤條件的Node.js函數(shù)遵循的約定。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)