2012-07-03 4 views
0

В приведенном ниже сценарии у меня есть логическое значение. В зависимости от результата я вызываю ту же самую функцию, с той лишь разницей, что число параметров.Как я могу избежать повторения в следующей ситуации JavaScript?

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 
    }); 
} 

В настоящий момент кажется, что я повторяю много кода без необходимости. Есть ли способ консолидировать это, чтобы я не повторял одно и то же?

+1

Почему бы не всегда вызывать функцию с тремя аргументами? Если вам не нужно отправлять значение param2, вы можете отправить нуль. Затем в вашей функции 'retrieveData' вы можете проверить, равенство param2 равно null. – Abhijit

ответ

2

Если ситуация так просто, как это, то просто сохранить повторяющуюся функцию в переменной:

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

передать объект с param2 равным false когда myBoolean является true

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

внутри retrieveData(obj, callback) вы будете получать param1 и param2 с obj.param1 и obj.param2

0

Refactor retrieveData сделать param2 дополнительный

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

});

Смежные вопросы