簡體   English   中英

異步mysql調用導致外鍵錯誤| Node.js

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM