首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >重构干代码的Node.JS回调

重构干代码的Node.JS回调
EN

Stack Overflow用户
提问于 2016-05-15 19:49:27
回答 1查看 217关注 0票数 0

两个ifs中的find调用都有以函数(e,docs)开头的回调。将其重构为DRYer的干净方法是什么?谢谢。

代码语言:javascript
代码运行次数:0
运行
复制
    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);
        });
    }
EN

回答 1

Stack Overflow用户

发布于 2016-05-15 19:56:21

最明显的干燥代码的方法是将回调提取到一个命名函数,该函数可以作为find方法的最后一个参数的回调传递:

代码语言:javascript
代码运行次数:0
运行
复制
 // 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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37237907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档