因此,我想按以下顺序运行所有这些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 `);
})
}});
});
});
}
这里的问题是,即使我使用了Promise,查询也没有按所述顺序进行。首先,所有db.query Promise都在运行,然后完成所有CSV解析。
答案 0 :(得分:0)
您不是在parse
函数中调用“解决”或“拒绝”。
答案 1 :(得分:0)
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);
reject(err) // here
}
csvParser(csvData, {
delimiter: ',',
cast: true
}, function (err, data) {
if (err) {
console.log(err);
reject(err) // here
} 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);
reject(err) // here
}
console.log(`${name} Inserted `);
resolve() // here
})
}});
});
});
}
另外,请看一下async / await以使此代码更具可读性。