我正在为API设计一个模块,在某些方法中,如果你关心结果,只指定一个回调是有意义的。一个例子是存储一些数据的请求,其中响应是关于存储的数据的信息(内部id,时间戳等)。我理解函数的代码应该是:
MyFunc.prototype.putRecord = function(data, next){
var self = this;
//Any validation and transformation
api.storeRecord(data, function(err, data){
next(err, data);
});
};
我的问题是如何设计它以便在next === "undefined"
时,我的模块不会抛出错误。如果api.storeRecord
调用确实返回错误,如果未提供next
参数,我仍然希望抛出错误。
我正在考虑创建一个辅助函数来处理是否定义next
,如果是,则调用它,或者如果发生错误则抛出错误:
function callNext(err, res, next){
if (next) next(err, data);
else if (err) throw err;
};
然后我可以调用此函数而不是next
:
MyFunc.prototype.putRecord = function(data, next){
var self = this;
//Any validation and transformation
api.storeRecord(data, function(err, data){
callNext(err, data, next);
});
};
这是我想要做的最好的方式,还是有另一种被认为是标准的方式?
答案 0 :(得分:0)
你可以让它变得更干净。由于您的处理程序除了转发呼叫之外什么都不做,您实际上可以完全消除它。你需要照顾无效/缺失next
,以便像你一样抛出正确的err
。以下是我使用回调方案的方法:
function throwHandler(err) {
if(err) {
throw err;
}
}
function nextOrHandler(next) {
if('function' === typeof next) {
return next;
}
return throwHandler;
};
MyFunc.prototype.putRecord = function(data, next) {
api.storeRecord(data, nextOrHandler(next));
}