我的問題是,當我得到用戶數組,並試圖運行異步每個啓動每個sqlRequest,而不是逐一推入數組。SQL查詢與異步每個
它應該通過1執行sqlRequest 1,而不是通過每個用戶執行sqlRequest和push數組。
這裏是一個異步每個
function getUserFavCat(params, callback) {
var usersArrayCat = [];
async.each(params, function (user, cb) {
sqlRequest("SELECT b_cat.title, b_cat.id FROM dbo.Students st INNER JOIN dbo.SaleView sv ON sv.userId = st.id INNER JOIN dbo.KEY_BrandcategoryToSale b_key ON b_key.saleId = sv.saleId INNER JOIN dbo.BrandCategories b_cat ON b_cat.id = b_key.brandCategoryId WHERE st.id = " + user.id, function (err, result) {
if (!result) {
//console.error("NO FAVOURITE CATEGORY FOR USER " + JSON.stringify(user))
} else if (result.length == 0) {
//console.error("NO FAVOURITE CATEGORY FOR USER " + JSON.stringify(user))
} else {
user.favouriteCat = utils.takeMostRepeatingObj(result);
usersArrayCat.push(user);
}
cb();
})
}, function() {
callback(null, usersArrayCat)
});
};
這裏是SQL查詢:
function sqlRequest (sqlQuery, callback) {
var connection = new sql.Connection(sql_conf, function (err) {
if (err){
console.log(err)
} else {
var request = new sql.Request(connection);
request.query(sqlQuery, function(err, result) {
console.log(result)
if(err){
console.error(err)
} else if(!result){
console.error("NO RESPONSE SQL QUERY")
} else {
callback(null, result);
connection.close();
}
})
}
});
connection.on('error', function(err) {
console.log(err);
});
};
與您的問題沒有關係,但不建立這樣的查詢 - 你正在打開一個SQL注入漏洞。 –
但我應該如何執行sql查詢循環? –
對不起,我的意思是這個部分'WHERE st.id =「+ user.id'。不要連接你的字符串。無論你使用什麼庫,它應該讓你建立參數化查詢,做到這一點。 –