0
我使用node-mysql
與池連接來處理數據庫的東西。一切都很好,但連接的方式被釋放。看來connection.release()
需要在任何時候打電話事件將要結束。這非常不方便,也使我的代碼更加醜陋。太多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();
});
});
我覺得這個問題是如此真實。我怎樣才能避免它?
這將需要重構你的代碼。重構您的代碼,以儘量減少每個函數的返回次數。這也會減少你的conn.release()調用。 – Guanxi 2014-08-27 17:24:05
如果我的每個「if(!value)」語句都是異步函數,會發生什麼情況。每個回調都包含一個'error'參數。如何實施重構? – user3925697 2014-08-27 17:47:02