【问题标题】:How can I avoid repeating myself in the following JavaScript situation?如何避免在以下 JavaScript 情况下重复自己?
【发布时间】:2012-07-03 15:37:15
【问题描述】:

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

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

现在感觉我在不必要地重复很多代码。有没有办法巩固这一点,所以我不会重复同样的事情?

【问题讨论】:

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

标签: javascript dry


【解决方案1】:

如果情况就这么简单,那么只需将重复的函数保存在一个变量中即可:

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

【讨论】:

    【解决方案2】:

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

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

    retrieveData(obj, callback) 内,您将使用obj.param1obj.param2 检索param1param2

    【讨论】:

      【解决方案3】:

      重构retrieveData 使param2 可选

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

      });

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-04-10
        • 2013-12-11
        • 2021-09-03
        • 2013-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多