Итак, я хочу запустить все эти SQL-запросы в следующей последовательности:
db.query("DROP TABLE if exists `wlb`.`library`, `wlb`.`tag_instance`, `wlb`.`tags`, `wlb`.`users`, `wlb`.`vote_library`, `wlb`.`vote_table`")
.then(db.query(Users).then(csv.parseCSV("users")
.then(db.query(Library).then(csv.parseCSV("Library")
.then(db.query(Tags).then(csv.parseCSV("tags")
.then(db.query(Tag_instance).then(csv.parseCSV("Tag_instance")
.then(db.query(Vote_table).then(csv.parseCSV("Vote_table")
.then(db.query(Vote_library).then(csv.parseCSV("Vote_library")
)))))))))))).catch("Error");
Функция db.query выглядит следующим образом:
var query = function (query,callback) {
return new Promise(function (resolve, reject) {
conn.db.query(query, function(error, result) {
if(error){
reject(new Error("Error occurred while making query" + error));
} else{
console.log("Query Executed");
resolve(result);
}
})
});
}
И функция parseCSV выглядит следующим образом:
var parseCSV = (name) => {
return new Promise(function (resolve, reject) {
filePath = __dirname + `/../../Data/${name}.csv`;
fs.readFile(filePath, {
encoding: 'utf-8'
}, function (err, csvData) {
if (err) {
console.log(err);
}
csvParser(csvData, {
delimiter: ',',
cast: true
}, function (err, data) {
if (err) {
console.log(err);
} else {
var sql="INSERT INTO `wlb`."+`${name}`+ " VALUES ?";
data.splice(0,1);
conn.db.query(sql, [data], function(err) {
if (err){conn.db.end();
console.log(name);
throw err;
}
console.log(`${name} Inserted `);
})
}});
});
});
}
Проблема здесь в том, что, хотя я использовал обещания, запросы не последовательны, как описано. Сначала выполняются все обещания db.query, а затем выполняется анализ CSV.