Node.js 中的异常处理
目录
Node 中的异常处理是一个应该注意的点。
try/catch
通常我们在代码中捕获异常,会用下面的方式:
try {
//process
} catch (e) {
errorHandler(e)
}
但是在 Node 中,这种方式对于处理异步编程并不一定适用,例如:
function asyncFunc (callback) {
process.nextTick(callback);
}
try {
asyncFunc(callback);
} catch (e) {
errorHandler(e)
}
上面的代码中,调用 asyncFunc(callback)
,callback
在下一个事件循环才会执行,但是 try/catch
只能捕获当前事件循环内的异常,
所以当 callback
执行时抛出的异常将无法捕获。
不要对回调函数进行异常捕获
如下下面的写法:
try {
process();
callback(null, result);
} catch (e) {
callback(e, result);
}
上面的代码中,不仅会捕获 process()
中的异常,callback()
中的异常一样会捕获,所以如果 callback()
执行抛出异常,catch()
代码块一样
会捕获,这样的话 callback()
将会执行两次,正确的写法应该是:
try {
process();
} catch (e) {
return callback(e, result);
}
callback(null, result);
处理异常的常规写法
通常回调函数的第一个参数是异常,如果第一个参数为空,则表示没有异常。