我想知道在使用它之后应该在哪里发布连接,我已经看到了几个选项:
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)?
});
或者也许应该发布错误和非错误情况?
答案 0 :(得分:4)
正确的地方是#2或#5。
您希望在完成连接后释放连接。
#6是错误的,因为query()
是异步的,所以它会在连接完成查询之前和回调触发之前立即返回。因此,在完成连接之前,您将释放连接。
#5是正确的,因为回调已经解雇,你已经完成了你将要做的一切。请注意,这假定您不使用return
在该点之前退出该函数。 (有些人在他们的if (err)
区块中这样做。)
#2也是正确的。如果 在回调中使用它,那么在完成使用之前你不想发布它。
#3和#4不正确,除非您使用两者。否则,您只是在某些情况下释放连接。
并且#1不正确,因为您尚未使用该连接。