Javascript 接受回调最佳实践的函数设计
我正在为一个API设计一个模块,在其中的一些方法中,只有在您关心结果的情况下,才有必要指定回调。例如,请求存储一些数据,其中响应是关于存储的数据的信息(内部id、时间戳等)。我理解函数的代码应该是:Javascript 接受回调最佳实践的函数设计,javascript,node.js,Javascript,Node.js,我正在为一个API设计一个模块,在其中的一些方法中,只有在您关心结果的情况下,才有必要指定回调。例如,请求存储一些数据,其中响应是关于存储的数据的信息(内部id、时间戳等)。我理解函数的代码应该是: MyFunc.prototype.putRecord = function(data, next){ var self = this; //Any validation and transformation api.storeRecord(data, function(err
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
参数的情况下抛出错误。
我正在考虑创建一个helper函数,用于检查是否定义了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
。下面是我如何使用回调方案实现的:
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));
}
完全不同的解决方案是回报承诺,而不是接受承诺callback@Bergi谢谢你指出承诺。我不知道这些,它们真的很有用。