Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何避免在下面的JavaScript情况下重复我自己?_Javascript_Dry - Fatal编程技术网

我如何避免在下面的JavaScript情况下重复我自己?

我如何避免在下面的JavaScript情况下重复我自己?,javascript,dry,Javascript,Dry,在下面的场景中,我有一个布尔值。根据结果,我调用完全相同的函数,唯一的区别是参数的数量 var myBoolean = ... if (myBoolean) { retrieveData(param1, function(err, result) { if (err) throw err; // process }); } else { retrieveData(param1, param2, function(err, result)

在下面的场景中,我有一个布尔值。根据结果,我调用完全相同的函数,唯一的区别是参数的数量

var myBoolean = ...

if (myBoolean) {
    retrieveData(param1, function(err, result) {
        if (err) throw err;
        // process
    });
}
else {
    retrieveData(param1, param2, function(err, result) {
        if (err) throw err;
        // process
    });
}

现在我觉得我在不必要地重复很多代码。有没有一种方法可以合并这个,这样我就不会重复同样的事情了?

myBoolean
true时,传递一个
param2
等于
false
的对象

retrieveData({ 
       param1: param1,
       param2: (!myBoolean)? param2 : false 
     }, function(err, result) {
        if (err) throw err;
        // process
    });

retrieveData(obj,callback)
中,您将使用
obj.param1
obj.param2
检索
param1
param2

如果情况如此简单,则只需将重复的函数保存在变量中:

var myBoolean = ...
var callback = function(err, result) {
    if (err) throw err;
    // process
}
if (myBoolean) {
    retrieveData(param1, callback);
}
else {
    retrieveData(param1, param2, callback);
}

重构retrieveData以使param2成为可选的

retrieveData(param1, function(err, result), param2) {
   if (err) throw err;
   // process

}))

为什么不总是用3个参数调用函数?如果不需要发送param2值,可以发送null。然后在
retrieveData
函数中,可以检查param2是否为null。