如何重构asynchronous重复代码

我有下面的代码片段,我想从重复的代码重构(做一个function)。

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的asynchronous调用都有重复的内部callback。 我想把它拉起来,并从中做出一个function。 所以需要带参数,logging器和callback函数。

我如何做一个function呢? 之后,function添加什么样子?

如果你稍微改变了你的代码的顺序,你可以像这样重构它:

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