我使用我的代码运行jscpd工具,它检测到以下重复代码:
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命令检测到:
.then(data => dbService.disconnectDb(data))
.then(data => callback(data))
.catch((error) => {
dbService.disconnectDb(error).then(error => {
console.log(error);
callback({}, error);
}这是复制的代码,我如何解决这个问题或改进代码?
发布于 2017-10-16 00:46:30
如果我正确理解,您在几个地方重复了相同的代码,这些代码由您使用的工具检测到。
您始终可以找到一种方法将此类代码提取到函数/方法中,并在使用它的任何地方调用它。
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().then(data => dbService.disconnectDb(data))
.then(data => callback(data))可以这样团结起来:
.then(data => {
dbService.disconnectDb(data);
callback(data);
})更新1请看下面的代码,这应该是一个几乎完整的例子。query()方法是使用数据库打开来完成工作的方法。注意,Model和Name可能需要从函数的外部提供。
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);
});
});
}https://codereview.stackexchange.com/questions/177749
复制相似问题