如何重构异步重复代码
How to refactor away asynchronous duplicate code
我有以下代码片段,我想从重复的代码中重构(创建一个函数)。
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 的所有异步调用都复制了内部回调。我想把它拉起来并用它做一个函数。所以它需要带参数,记录器和回调函数。
我如何利用它创建一个函数?
之后添加的函数会是什么样子?
如果您稍微更改了代码中的顺序,您可以像这样重构它:
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);
});
}
我有以下代码片段,我想从重复的代码中重构(创建一个函数)。
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 的所有异步调用都复制了内部回调。我想把它拉起来并用它做一个函数。所以它需要带参数,记录器和回调函数。
我如何利用它创建一个函数? 之后添加的函数会是什么样子?
如果您稍微更改了代码中的顺序,您可以像这样重构它:
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);
});
}