我正在使用node-mysql
与池连接来处理数据库的东西。一切都很好,但连接的发布方式。似乎connection.release()
需要在任何时候调用一个事件。这非常不方便,也使我的代码更加丑陋。
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();
});
});
我觉得这个问题是如此真实。我怎么能避免呢?
答案 0 :(得分:0)
将代码放在try语句中,然后使用conn.release:
放入finally块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(); }
});
最终阻止将被执行(无论System.Exit除外)