2015-05-18 2 views
2

Мне интересно, где соединение должно быть освобождено после его использования, я видел несколько вариантов для этого:разрывать соединение после использования пула соединений Node.js

pool.getConnection(function(err, conn){ 

    //conn.release() // should be placed here (1)? 
    conn.query(query, function(err, result){ 

     //conn.release() // should be placed here (2)? 
     if(!err){ 
      //conn.release() // should be placed here (3)? 
     } 
     else{ 
      //conn.release() // should be placed here (4)? 
     } 
     //conn.release() // should be placed here (5)? 
    }); 

    //conn.release() // should be placed here (6)? 

}); 

Или, может быть, она должна быть выпущена как ошибка и не ошибки?

ответ

4

Правильное место либо # 2, либо # 5.

Вы хотите освободить соединение, когда закончите использовать его.

# 6 было бы неправильно, потому что query() является асинхронным, поэтому он сразу же будет возвращен до того, как соединение будет выполнено с запросом и до того, как произойдет обратный вызов. Таким образом, вы будете освобождать соединение, прежде чем с этим закончите.

# 5 правильно, потому что обратный звонок уволен, и вы сделали все, что вы собираетесь с ним делать. Обратите внимание, что это предполагает, что вы не используете return для выхода из функции до этой точки. (Некоторые люди делают это в своих блоках if (err).)

# 2 также является правильным, если вы не используете соединение в любом месте обратного вызова. Если вы -, используя его в обратном вызове, вы не хотите его выпускать, прежде чем вы закончите использовать его.

№ 3 и № 4 являются неправильными, если вы не используете и из них. В противном случае вы только освобождаете соединение в некоторых ситуациях.

И # 1 неверен, так как вы еще не использовали соединение.

Смежные вопросы