如何重构异步重复代码

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