Jos*_*eph 7 javascript browser coding-style node.js
我正在编写一个需要回调的javascript函数.如果出现问题,回调将传递一个错误参数.
什么是最好/最标准的呼叫约定?
'errorMsg'字符串还是一个new Error('errorMsg')对象?即,更正确的是 - 这段代码:
foo = function(bar, callback) {
...
if (error) {
callback('troz not found');
} else {
callback(null, result);
}
}
Run Code Online (Sandbox Code Playgroud)
或者这段代码:
foo = function(bar, callback) {
...
if (error) {
callback(null, 'troz not found');
} else {
callback(result);
}
}
Run Code Online (Sandbox Code Playgroud)
或这个:
foo = function(bar, callback) {
...
if (error) {
callback(null, new Error('troz not found'));
} else {
callback(result);
}
}
Run Code Online (Sandbox Code Playgroud)
如果相关,我的代码将用作NodeJS模块和基于浏览器的JavaScript库.
您可以指定两个回调,一个用于成功,一个用于错误,并且两者都封装在一个"回调"参数中.这是有多少Javascript库处理您的需求.
var fooFn = function(bar, callbacks) {
callbacks = callbacks || {}; //make callbacks argument optional
...
if (error) {
if (callbacks.error) {
callbacks.error('troz not found'); //pass the error message as a string
}
} else if (callbacks.success) {
callbacks.success(result);
}
}
Run Code Online (Sandbox Code Playgroud)
成功和错误功能是可选的.要指定两者,请像这样调用:
fooFn("some bar", {
success: function(result) {
//success :-)
},
error: function(errorMsg) {
//error :-(
}
});
Run Code Online (Sandbox Code Playgroud)
你也可以这样做:
fooFn("some other bar");
Run Code Online (Sandbox Code Playgroud)
如果您愿意,可以展开回调对象以支持其他方案,例如"完成".
您应该为您的图书馆选择一个惯例并坚持下去;否则,它就是任意的。JavaScript 中有许多不同的处理错误的方法:
结合:
真的,这完全取决于你。这还取决于您想要做什么。例如,如果您实际上并不打算对故障信息执行任何操作,那么可能不值得花费构建/传递该额外信息的费用。但也许您有大量详细的故障信息想要传递给用户或返回给 API 调用者,在这种情况下它很有意义。
选择一个约定,并坚持下去。除此之外,这完全取决于你。