I'm using node-mysql
with pool connection to handle database stuff. Everything is great, but the way connection is released. It seems that connection.release()
need calling at anytime an event is going to be ended. This is very inconvenient and also make my code a lot more uglier.
db.getConnection(function(error,conn){
if(error){
conn.release();
throw error;
}
conn.query(query1,value1,function(err,result){
if(err){
conn.release();
throw err;
}
if(!value1){
return conn.release();
}
// do something here
if(!value2){
return conn.release();
}
// do something here
...
...
...
if(!valueN){
return conn.release();
}
// do something here
conn.release();
});
conn.query(query2,value2,function(err,result){
if(err){
conn.release();
throw err;
}
if(!value1){
return conn.release();
}
// do something here
if(!value2){
return conn.release();
}
// do something here
...
...
...
if(!valueN){
return conn.release();
}
// do something here
conn.release();
});
...
...
...
conn.query(queryN,valueN,function(err,result){
if(err){
conn.release();
throw err;
}
if(!value1){
return conn.release();
}
// do something here
if(!value2){
return conn.release();
}
// do something here
...
...
...
if(!valueN){
return conn.release();
}
// do something here
conn.release();
});
});
I feel that this problem is so real. How can I avoid it?
just enclose your code in a try statement and then put a finally block with conn.release:
conn.query(query1,value1,function(err,result){
try {
if(err){
throw err;
}
if(!value1){
return;
}
// do something here
if(!value2){
return;
}
// do something here
...
...
...
if(!valueN){
return;
}
}
finally { conn.release(); }
});
finally block is going to be executed whatever happen (with exception of System.Exit)