[英]Nodejs loops iterating before executing the mysql queries embedded inside them
在 mysql 语句完成执行后,我无法返回 projectIds 数组,因为在执行它们之前循环正在迭代。 这导致每次都返回空数组。
function fetchProjects (projects, userId, callback) {
projectIds = [];
Object.keys(projects).forEach(function(key) {
var row = projects[key];
const sql = 'create table if not exists users_' + row.project_id + '(sno int primary key auto_increment, iteration_no int not null, user_id int not null, foreign key(iteration_no) references pro_' + row.project_id + '(iteration_no), foreign key(user_id) references user(user_id))';
connection.query(sql, function(err, result) {
if(err) {
console.log(err.sqlMessage);
return callback(err.sqlMessage, false);
} else {
// console.log("First statement executed");
const sql1 = "select distinct t1.project_id, t1.project_name, t1.client, t1.initial_department_id, t1.start_date, t1.status, t1.current_department, t1.currently_assigned_user from project t1, users_" + row.project_id + " t2 where t1.project_id = '" + row.project_id + "' and (select user_id from users_" + row.project_id +" where user_id = " + userId + ")";
connection.query(sql1, function(err, result1) {
if(err) {
console.log(err.sqlMessage);
return callback(err.sqlMessage, false);
} else {
if(result1.length > 0) {
console.log(result1);
projectIds.push(result1);
}
}
});
}
});
// console.log("Iterating");
});
return callback(false, projectIds);
}
您正在尝试在forEach
执行回调样式代码,该代码不等待查询完成。 这就是你得到 emoty 数组的原因。 我会做一些修改
query
方法的承诺版本。 查看mysql节点包的文档for..of
循环而不是 forEach。async
await
。希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.