[英]Asynchronous mysql calls cause foreignkey error | Node.js
我想用 node.js 創建一個數據庫和一些表。 問題是,表是同時創建的,有時(,)某些表沒有創建。 因為它們在創建引用表時不存在,是的,通常我一個接一個地執行 sql 語句,所以如果我在我的 mysql 工作台中執行它。 沒有錯誤。 但是在節點中由於異步事件循環(如果我理解正確的話)它將同時執行。
這是我的一些代碼:
const pool = require("./database2"); // using the pool connection of mysql2
const executeOne = (sql) => {
pool.execute(sql, (err, result) => {
if (err) console.log(err);
})
}
client.on("guildCreate", (guild) => {
guildname = guild.name.replace(" ", "_");
const createTables = new Promise((resolve, reject) => {
executeOne(`CREATE DATABASE IF NOT EXISTS ${guildname}`);
//tried to set the checks off but doesn't work either
executeOne(`SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS;`);
executeOne(`SET FOREIGN_KEY_CHECKS=0;`);
resolve()
})
createTables.then(() => {
executeOne("1st stmt"); //no foreign keys
})
.then(() => {
executeOne("2nd stmt"); //no fks
})
.then(() => {
executeOne("3rd stmt"); //1 fk referencing 1st stmt
})
.then(() => {
executeOne("4th stmt"); //no fks
})
.then(() => {
executeOne("5th stmt"); //2fks, one ref. 2nd stmt, one ref. 3rd stmt
})
.then(() => {
executeOne("6th stmt"); //2fks, one ref. 3rd stmt, one ref. 4th stmt
})
.catch((err) => {
console.log(err)
});
})
所以我基本上不明白如何一個接一個地執行語句,或者他們是其他方法嗎?
感謝幫助!
好吧,我解決了。
我將setTimeout()
Function 添加到 .then .then()
子句中,並將每個子句的延遲設置為高 100 毫秒。 這不是一個好方法,但它確實有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.