2016-05-15 3 views
0

Оба метода находят вызовы внутри ifs имеют обратные вызовы, которые начинаются с функции (e, docs). Что было бы чистым способом реорганизовать его как DRYer? Спасибо.Refactor Node.JS обратные вызовы для кода 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); 
     }); 
    } 

ответ

0

Наиболее очевидный способ DRY код, чтобы извлечь свой обратный вызов именованной функции, которые могут быть переданы в качестве обратного вызова на последнем арг вашего метода 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); 
Смежные вопросы