让我们看看以下代码:
的 mongodb.js 的
var mongo = require('mongodb')
, mongodb = module.exports;
mongodb.database = function(key, dbName, dbServer, callback){
var db = new mongo.Db(dbName, dbServer);
db.open(function(error, connection){ // 5
if(error){ // 1
throw error;
}
return callback(null, connection);
});
};
mongodb.collection = function(dbKey, collName, callback){
mongodb.database(dbKey, function(error, connection){
connection.collection(collName, function(error, collection){ // 2
if(error){ // 3
throw error;
}
return callback(null, collection);
});
});
}
的 model.js 的
var db = require('./mongodb.js');
var model = module.exports;
model.test = function(callback){
db.collection('users', function(error, collection){ // 4
// do something.
});
}
我的问题是,为什么我们总是在回调传递时执行“错误,资源”,因为,请查看 1
我们正在处理错误,因此无法达到 2 *
与 3 和 4 相同,它们将始终为NULL,因为错误是在不同的情况下处理的层。现在为什么我不能在 5 :
这样做db.open(function(error, connection){
if(error){ // 1
return errorHandler(error);
}
return callback(collection);
});
errorHandler函数将是一个处理重大错误的函数,因此我们不必在每一层使用它们,例如mongodb.findOne的相同故事,为什么我们在传入时必须处理错误回调?
答案 0 :(得分:2)
我主要在错误未被抛出任何地方(或捕获)时使用callback(error,result)
模式。即你不想因为一些缺少的参数而停止你的应用程序。请查看以下代码:
function somethingAsync (options, callback) {
if (!options || !options.name) {
callback('no name specified'); //we dont want to kill the Application
return;
};
doSomeThingInternal(callback);
};
在消费者方面,您可以从任何内部功能向客户端打印错误。
somethingAsync(null, function (err,res)) {
if(err) {
console.log('error occured: ' + err);
};
};