2015-10-06 4 views
1

У меня есть следующий фрагмент кода, и я хочу реорганизовать (сделать функцию) из дублированного кода.Как отредактировать асинхронный повторяющийся код

function add(logger, client, args, callback) { 

    client.execute('some command', args, function (err, result) { 
     if (err) { 
      logger.error({err: err}); 
      return callback(err); 
     } 

     // do more... 


     logger.debug({result: result}); 
     return callback(null, result); 
    }); 
} 

Все мои асинхронные вызовы client.execute дублируют внутренний обратный вызов. Я хочу вытащить это и сделать из него функцию. поэтому он должен принимать параметры, регистратор и функцию обратного вызова.

Как сделать функцию из этого? После этого, как бы добавилась функция?

+0

Почему вы вернуть хоть что-то в errback? – Amit

+0

Вы можете перефразировать свой вопрос, пожалуйста? Я не понимаю, что вы спрашиваете – reza

+0

'return callback (err);' - в чем смысл возврата этого значения? Возвращает ли обратный вызов что-либо значимое? Является ли функция async использующим это возвращаемое значение? – Amit

ответ

2

Если вы немного изменили порядок в вашем коде, вы можете реорганизовывать это следующим образом:

function logAndCallback(err, result, callback) { 
    if (err) { 
     logger.error({err: err}); 
     return callback(err); 
    } 
    logger.debug({result: result}); 
    return callback(null, result); 
} 

function add(logger, client, args, callback) { 

    client.execute('some command', args, function (err, result) { 
     if (!err) { 
      // do more... 
     } 

     return logAndCallback(err, result, callback); 
    }); 
} 
+0

. Я опустил много деталей, чтобы все было ясно ... Сказав, я могу использовать подход, который вы рекомендуете, и с небольшими изменениями, отвечает на мой вопрос , Я ценю вашу помощь. – reza

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