functiondevise接受callback最佳实践

我正在为一个APIdevise一个模块,其中一些方法只有在你关心结果时才能指定callback。 一个例子是存储一些数据的请求,其中响应是关于存储的数据(内部ID,时间戳等)的信息。 我明白,函数的代码应该是:

MyFunc.prototype.putRecord = function(data, next){ var self = this; //Any validation and transformation api.storeRecord(data, function(err, data){ next(err, data); }); }; 

我的问题是如何devise,以便当下next === "undefined" ,我的模块不会抛出一个错误。 如果api.storeRecord调用确实返回错误,那么如果未提供next参数,我仍然会引发错误。 我正在考虑创build一个辅助函数来处理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); }); }; 

这是最好的方式去做我想做的,或者有另一种被认为是标准的方式吗?

你可以使它更清洁。 由于您的处理程序除了转发呼叫之外什么也不做,您可以完全消除它。 你需要照顾无效/ next丢失,以便像你一样抛出适当的err 。 下面是我如何使用callbackscheme:

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