功能设计接受回调最佳实践

时间:2015-11-13 06:56:52

标签: javascript node.js

我正在为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);
    });
};

这是我想要做的最好的方式,还是有另一种被认为是标准的方式?

1 个答案:

答案 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));
}