我在nodejs中使用mysql,并尝试这样做:
dbQueries = ['multiple', 'sql', 'statements', 'that', 'need', 'to', 'be', 'executed', 'in', 'order'];
executedQueries = 0;
dbConn = mysql.connect();
maxQueries = dbQueries.length;
dbQueries.forEach(async (dbQuery) => {
console.log("Start");
return dbConn.query(dbQuery, function(err, results, fields) {
console.log("Finish");
if (err) {
errorList.push({ err, results, fields, dbQuery });
}
executedQueries++;
if (executedQueries >= maxQueries) {
if (errorList.length > 0) {
console.log("Error: ", databaseTable.name, " Errors reported: ", errorList);
}
if (typeof(callbackFunc) === 'function') { callbackFunc(errorList, executedQueries); }
}
});
});
但最终的结果是,有时查询会以无序的方式结束。我之所以知道这一点,是因为我设置了列,然后通过添加主键等来修改表,有时会出现错误 Table 'blah.blah' doesn't exist
. 错误每次都会改变。我可以看到这是因为有多个 Start
在看到多个 Finish
锿。不确定是否正确使用了异步。
我不想打开 multipleStatements
如果可能的话。
1条答案
按热度按时间sauutmhj1#
看到意外结果的主要原因是nodejs异步执行这些查询。运行多个查询的正确方法: