私の問題は、私がユーザーの配列を取得して、それぞれがそれぞれのsqlRequestを起動し、配列を押して1つずつ進まない非同期を実行しようとしているときです。それぞれasyncのSQLクエリ
sqlRequestを1つずつ実行し、各ユーザーsqlRequestと配列内のプッシュですべて実行する必要はありません。ここで
は、ここで各
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'です。文字列を連結しないでください。使用するライブラリが何であれ、パラメータ化されたクエリを作成できるようにしてください。 –