我有以下代码:
client.keys("key_"+id, function (err, replies){
if (replies.length > 0){
client.sunion(replies,function (err, replies){
{...}
});
}else{...}
});
下面我有这个功能
pg.connect(conString, function(err, client) {some code});
但我希望在第一段代码中执行pg.connect
而不是...
。
如何最好地避免复制代码和内存泄漏,pg.connect
函数在所有{...}
中都是相同的。
使用复制代码,它将如下所示:
client.keys("key_"+id, function (err, replies){
if (replies.length > 0){
client.sunion(replies,function (err, replies){
pg.connect(conString, function(err, client) {some code});
});
}else{pg.connect(conString, function(err, client) {some code});}
});
答案 0 :(得分:1)
请记住,您正在使用JavaScript并且可以定义一些辅助函数来减少您的输入...
function withConnect( callback ) {
return pg.connect( conString, callback );
}
例如,会节省你一些时间......但是如果错误处理程序总是一样的话呢?
function withConnect( callback ) {
return pg.connect( conString, function( err, client ) {
if ( err ) {
handleError( err );
}
// we might still want something special on errors...
callback.apply( this, arguments );
}
}
您甚至可以通过这种方式抽象简单的插入/更新样式查询。
答案 1 :(得分:0)
您可以尝试(如果“某些代码”部分相同):
function connectFunc() {
return function (err){
pg.connect(conString, function(err, client) {some code});
};
}
client.keys("key_"+id, function (err, replies){
if (replies.length > 0){
client.sunion(replies, connectFunc());
} else { connectFunc()(err)}
});
或者,如果“某些代码”有所不同:
function connectFunc(some_code) {
return function (err){
pg.connect(conString, function(err, client) {some_code();});
};
}
client.keys("key_"+id, function (err, replies){
if (replies.length > 0){
client.sunion(replies, connectFunc(function(){some code}));
} else { connectFunc(function(){some other code})(err)}
});