Поскольку API вашей базы данных является асинхронным, ваш цикл for
будет завершен до выполнения любого из db.query
обратных вызовов.Поэтому, когда вы push
там, уже слишком поздно для цикла for
- он уже завершен.
Вы должны посмотреть на обещания, и, возможно, ваша база данных API поддерживает обещания.В этом случае используйте эту возможность.Но из комментариев я понимаю, что вы используете пакет mysql , который не имеет поддержки обещаний.
Принцип (с обещаниями или без них) заключается в том, что вы ждете завершения каждого запроса, прежде чем продолжить выполнениеСледующая «итерация».Вам понадобится какой-то асинхронный цикл для достижения этого.Например, вы можете использовать эту функцию:
var pre_req_subjects_arr = [2310,2320,2410];
(function loop(j) {
if (j >= pre_req_subjects_arr.length) { // all "iterations" done!
console.log("pre_req_subjects_arr is " + JSON.stringify(pre_req_subjects_arr));
return;
}
console.log("j is : "+j);
db.query("SELECT `NUMBER` FROM `COURSE`",function(err,preOfPreReq) {
if(err) {
console.log("Error while creating array of pre_req subjects : " + err);
} else {
console.log("j inside db query : "+j);
if(j==1) {
pre_req_subjects_arr.push(1111);
}
if(pre_req_subjects_arr[j] == 1111) {
console.log("looks good");
}
}
loop(j+1); // Only now call the next "iteration"
})
})(0); // start the first iteration
В качестве альтернативы вы можете обещать метод query
и затем использовать силу await
:
// Create a promisified version of db.query
const queryPromise = (db, sql) =>
new Promise((resolve, reject) =>
db.query(sql, (err, result) => err ? reject(err) : resolve(result))
);
// Now you can use async/await and a for-loop
(async function () {
const pre_req_subjects_arr = [2310,2320,2410];
for (let j = 0; j < pre_req_subjects_arr.length; j++) {
console.log("j is : "+j);
try {
const preOfPreReq = await queryPromise(db, "SELECT `NUMBER` FROM `COURSE`");
console.log("j inside db query : "+j);
if (j==1) {
pre_req_subjects_arr.push(1111);
}
if (pre_req_subjects_arr[j] == 1111) {
console.log("looks good");
}
} catch(e) {
console.log("Error while creating array of pre_req subjects : " + e);
}
}
console.log("pre_req_subjects_arr is " + JSON.stringify(pre_req_subjects_arr));
})();
NB: Как примечание: вообще плохая идея выполнять SQL-запрос в цикле.Обычно вы можете заменить это одним более умным запросом.