首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >代码重构与承诺

代码重构与承诺
EN

Code Review用户
提问于 2017-10-12 10:43:46
回答 1查看 233关注 0票数 -1

我使用我的代码运行jscpd工具,它检测到以下重复代码:

代码语言:javascript
复制
 dbService.connectDb(commonService.DB_CONFIG.CONNECTIONSTRING, {}).then(() => {
                    return dbService.query(Model, {
                        'name':Name
                    }, {}, {});
                })
         .then(data => dbService.disconnectDb(data))
         .then(data => callback(data))
         .catch((error) => {
          dbService.disconnectDb(error).then(error => {
           console.log(error);
           callback({}, error);
      })
  });

与我用于各种方法的方式相同,但是cpd命令检测到:

代码语言:javascript
复制
 .then(data => dbService.disconnectDb(data))
     .then(data => callback(data))
     .catch((error) => {
      dbService.disconnectDb(error).then(error => {
       console.log(error);
       callback({}, error);
  }

这是复制的代码,我如何解决这个问题或改进代码?

EN

回答 1

Code Review用户

回答已采纳

发布于 2017-10-16 00:46:30

重复代码要求提取

如果我正确理解,您在几个地方重复了相同的代码,这些代码由您使用的工具检测到。

您始终可以找到一种方法将此类代码提取到函数/方法中,并在使用它的任何地方调用它。

代码语言:javascript
复制
function processPromiseAndDisconnect(promise, callback) {
  promise
    .then(data => dbService.disconnectDb(data))
    .then(data => callback(data))
    .catch((error) => {
      dbService
        .disconnectDb(error)
        .then(error => {
          console.log(error);
          callback({}, error);
        });
    });
}

function consumer() {
  let promiseToProcess = createPromise(...);
  processPromiseAndDisconnect(promiseToProcess, (result, error) => {
    // Do work here...
  });
}

侧记:不需要重复的.then()

代码语言:javascript
复制
.then(data => dbService.disconnectDb(data))
.then(data => callback(data))

可以这样团结起来:

代码语言:javascript
复制
.then(data => {
  dbService.disconnectDb(data);
  callback(data);
})

更新1请看下面的代码,这应该是一个几乎完整的例子。query()方法是使用数据库打开来完成工作的方法。注意,ModelName可能需要从函数的外部提供。

代码语言:javascript
复制
function consumer() {
  const openDbPromise = connectToDb();
  processPromiseAndDisconnect(query(openDbPromise), (result, error) => {
    // Do work here...
  });
}

function connectToDb() {
  return dbService.connectDb(commonService.DB_CONFIG.CONNECTIONSTRING, {});
}

function query(openDbPromise) {
  return openDbPromise.then(() => dbService.query(Model, {'name': Name }, {}, {}));
}

function processPromiseAndDisconnect(promise, callback) {
  promise
    .then(data => {
      dbService.disconnectDb(data);
      callback(data);
    })
    .catch(error => {
      dbService
        .disconnectDb(error)
        .then(error => {
          console.log(error);
          callback({}, error);
      });
    });
}
票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/177749

复制
相关文章

相似问题

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