我正在为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);
});
};
这是我想要做的最好的方式,还是有另一种方式被认为是标准的?
发布于 2015-11-12 23:06:38
你可以把它弄干净一点。因为您的处理程序除了转发调用之外什么也不做,所以实际上可以完全消除它。您确实需要处理无效/丢失的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));
}
https://stackoverflow.com/questions/33687379
复制