0

次のコードがあります。

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

2 に答える 2

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

この方法で、単純な挿入/更新スタイルのクエリを抽象化することもできます。

于 2012-04-09T00:06:59.373 に答える
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)}
});
于 2012-04-09T00:26:45.760 に答える