2012-04-08 6 views
0

は、私は、次のコードを持っています。 pg.connectの機能がすべて{...}で同じになるように、コードとメモリリークのコピーを避けるための最善の方法。コピーコードでsocket.ioコールバック

これは次のようになります:あなたは、あなたのタイピングを減らすためにはJavaScriptを使用して作業しているし、少しのヘルパー関数を定義することができることを覚えておいてください

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

答えて

1

...例えば

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

このように単純な挿入/更新スタイルのクエリを抽象化することもできます。 ( "いくつかのコード" セクションが同じ場合)

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)} 
}); 
関連する問題