2016-05-15 2 views
0

Les deux trouvent des appels dans les ifs ont des rappels qui commencent par la fonction (e, docs). Qu'est-ce qui serait une façon propre de le refactoriser pour être DRYer? Merci.Refactor Node.JS callbacks pour le code DRY

if (connection_id == null) { 
     id_connectionsCollection.find({}, {}, function (e, docs) { 
      if (e) { 
       return callback(e); 
      } 
      var connectionDetails = null; 
      if (docs == null || docs.length == 0) {//if no connections found, use default from config 
       connectionDetails = defaultConnectionDetails 
      } 
      else { 

       connectionDetails = docs[0];//just get the first one 
      } 

      return callback(null, connectionDetails); 
     }); 

    } 
    else { 
     id_connectionsCollection.find({name: connection_id}, {sort: {updated_at: -1}}, function (e, docs) { 
      if (e) { 
       return callback(e); 
      } 
      var connectionDetails = null; 
      if (docs == null || docs.length == 0) { 
       connectionDetails = defaultConnectionDetails; 
      } 
      else { 

       connectionDetails = docs[0];//just get the first one 
      } 
      return callback(null, connectionDetails); 
     }); 
    } 

Répondre

0

La façon la plus évidente DRY votre code est d'extraire votre rappel à une fonction nommée qui peut être transmis en tant que votre rappel au dernier arg de votre méthode find:

// Can probably think of a better name here... 
doCallback = function(e, docs) { 
     if (e) 
     return callback(e); 

     var connectionDetails = null; 

     if (docs == null || docs.length == 0) 
     connectionDetails = defaultConnectionDetails; 
     else 
     connectionDetails = docs[0];//just get the first one 

     return callback(null, connectionDetails); 
} 

if (connection_id == null) 
    id_connectionsCollection.find({}, {}, doCallback); 
else 
    id_connectionsCollection.find({name: connection_id}, {sort: {updated_at: -1}}, doCallback);