Node.js 錯誤和異常

2018-01-12 19:32 更新

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

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

捕獲異常

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

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");

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

finally關(guān)鍵字

為了捕獲異常,你可以使用catch關(guān)鍵字。對于要運行的代碼,無論是否捕獲到異常,都可以使用finally關(guān)鍵字。下面的代碼顯示了一個簡單的例子來演示這個。

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部分只有在拋出錯誤時才執(zhí)行。finally部分仍然執(zhí)行,盡管在try部分中拋出了任何錯誤。

注意

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

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

對于上面的代碼,我們不能告訴代碼外面的錯誤??紤]一個簡單的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有一個約定,如果有錯誤,調(diào)用回調(diào)的第一個參數(shù)的錯誤。如果沒有錯誤,我們回調(diào)錯誤設(shè)置為null。Node.js的getConnection函數(shù)將類似于下面的內(nèi)容。

function getConnection(callback) { /*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); 
    } 
}); 

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號