我看过库在编写函数时利用了可选参数和回调。我正在编写一个库,我想知道允许用户跳过可选参数并发送回调是否是一个好习惯。
例如:
function listFiles(params, callback) {
if (typeof params === 'function' && !callback) {
callback = params;
params = {};
}
// more code here...
}
我的图书馆用户可以使用以下参数调用listFiles()
:
listFiles({ verbose: true }, function callback(err, results) { /*... */ })
或仅传递callback()
函数:
listFiles(function callback(err, results) { /*... */ })
我看到这种方法的主要好处是用户不必这样做:
listFiles(null, function callback(err, results) { /*... */ })
或
listFiles({}, function callback(err, results) { /*... */ })
问题在于,如果我将verbose
作为必需参数,我将会破坏未发送params
的用户以及发送为空的用户或将params
作为空的用户。< / p>
我应该使用可选参数作为回调还是一个坏主意?
答案 0 :(得分:2)
为什么不让callback
其中一个参数,以便用户始终将一个参数传递给listFiles()
?
function listFiles(params) {
// ... check for optional params and do something with them
params.callback(err, result);
}
现在作为用户,我可以根据需要传递可选参数(使用limit
和sort
作为示例):
listFiles({
limit: 10,
sort: 'desc',
callback: (err, result) => {
// ... do something with result
}
});
如果我想允许callback
为我提供默认值,则只需要listFiles()
个参数:
listFiles({
callback: (err, result) => {
// ... do something with result
}
});