Node.js 错误和异常

2018-01-12 19:32 更新

错误处理是所有应用程序的重要组成部分。要抛出异常,请使用JavaScript的throw  关键字。在JavaScript中,通常使用 Error 对象和消息来表示错误。你抛出这个错误,以表示错误情况:

<p>The code above generates the following result.</p>
function a() {
    throw new Error("Something bad happened!");
}
a();
错误抛出结果

捕获异常

你可以使用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关键字

为了捕获异常,你可以使用catch关键字。对于要运行的代码,无论是否捕获到异常,都可以使用finally关键字。下面的代码显示了一个简单的例子来演示这个。

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部分只有在抛出错误时才执行。finally部分仍然执行,尽管在try部分中抛出了任何错误。

注意

这种异常处理方法非常适用于同步JavaScript。对于异步JavaScript,我们应该处理回调中的错误。

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

对于上面的代码,我们不能告诉代码外面的错误。考虑一个简单的getConnection函数回调我们需要在成功连接后调用。

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

我们需要通知回调关于成功和失败。这就是为什么Node.js有一个约定,如果有错误,调用回调的第一个参数的错误。如果没有错误,我们回调错误设置为null。Node.js的getConnection函数将类似于下面的内容。

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

将错误作为第一个参数确保错误检查的一致性。这是所有具有错误条件的Node.js函数遵循的约定。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号