使用带有可选参数的回调

时间:2017-11-11 03:50:26

标签: javascript

我看过库在编写函数时利用了可选参数和回调。我正在编写一个库,我想知道允许用户跳过可选参数并发送回调是否是一个好习惯。

例如:

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>

我应该使用可选参数作为回调还是一个坏主意?

1 个答案:

答案 0 :(得分:2)

为什么不让callback其中一个参数,以便用户始终将一个参数传递给listFiles()

function listFiles(params) {
    // ... check for optional params and do something with them
    params.callback(err, result);
}

现在作为用户,我可以根据需要传递可选参数(使用limitsort作为示例):

listFiles({
    limit: 10,
    sort: 'desc',
    callback: (err, result) => {
        // ... do something with result
    }
});

如果我想允许callback为我提供默认值,则只需要listFiles()个参数:

listFiles({
    callback: (err, result) => {
        // ... do something with result
    }
});