在继承 EventEmitter 的类中,我们通常有两个点来处理错误。
someClass.on('error', function eventEmitterCallback(err){/* handle error*/});
//and
someClass.someAsyncAction(function asyncActionCallback(err){/* handle error*/})
我们不知道错误会出现在哪里,以及会执行什么回调。例如,乏味(MS SQL Server 的模块):
- 密码错误:两个回调
- 不正确的数据库名称:仅
eventEmitterCallback
;someAsyncAction
执行没有错误 - 不正确的主机:仅
someAsyncAction
- 主机IP格式不正确(例如
1234.10.0.1
):node.js刚刚关闭,没有任何错误:)
我想创建一个简单的函数,它将模块中的所有错误委托给回调的第一个参数。
function getSomeStuffFromDb(callback) {
var connection = new dbConnection(options);
connection.on('error', callback);
connection.connect(function(err) {
if (err) return callback(err);
/*exec SQL query*/
}
}
当然,如果有任何错误原因,我只想执行一次回调。我该怎么做呢?如何正确地将两点错误处理合二为一?也许如果在我的类中我使用继承 EventEmiter 的类,我也需要从 EventEmitter 继承我的类。