繁体   English   中英

ExpressJS - Javascript 似乎不是自上而下执行的

[英]ExpressJS - Javascript doesn't seem to execute from top-down

我有这个似乎没有用完的脚本。 我在变量重新分配的部分注意到了它。 显示代码片段和 output

//Create New Open Market under the game
            let latestRowId = 1;
            var sqlQuery2 = "SELECT ID FROM markets ORDER BY LAST_EDITED DESC LIMIT 1";
            db.query(sqlQuery2, [], function(err, result4) {
                if (err){
                    console.log("Error during /openBetoBetoMarket. Proc_4" + err);
                    res.status(500).json({ msg: "Server Error /openBetoBetoMarket. gameID:" + gameID });
                } else {
                    console.log("result4", result4[0].ID)
                    latestRowId = result4[0].ID
                }
            });
            console.log("latest_row_id", latestRowId);
            
            newRowID = latestRowId + 1
            newMarketId = result[0].MARKET_ID + 1
            newGameId = gameID
            newDescription = gameTitle
            console.log("New row id", newRowID, "new market id", newMarketId)

            sqlQuery = "INSERT INTO markets (ID, MARKET_ID, GAME_ID, DESCRIPTION, LAST_EDITED, WRITER) VALUES (?, ?, ?, ?, NOW(), CURRENT_USER);"
            db.query(sqlQuery, [newRowID, newMarketId, newGameId, newDescription], (err, result4) => {
                if (err){
                    console.log("Error during /openBetoBetoMarket. Proc_5 " + err);
                    res.status(500).json({ msg: "Server Error /openBetoBetoMarket. gameID:" + gameID });
                } else if (result4.affectedRows > 0){
                    console.log("Created new open market for /openBetoBetoMarket. MarketID: " + newMarketId);
                    res.status(200).json({msg: "Created New Open Market", marketID: newMarketId, isOpen: 1})     
                } else {
                    console.log("Error during /openBetoBetoMarket. Proc_5. Inserted but no affected Rows");
                    res.status(500).json({ msg: "Server Error /openBetoBetoMarket. gameID:" + gameID });
                }
            })

Output如下图:

latest_row_id 1
新行 id 2 新市场 id 3
结果 4 2
/openBetoBetoMarket 期间出错。 Proc_5 错误:ER_DUP_ENTRY:键“markets.PRIMARY”的重复条目“2”

如您所见,它似乎跳过了第一个 db.query 并直接进入下一个变量赋值,然后执行第一个 db.query。 知道我在这里缺少什么吗? 第一次在这里发帖。 谢谢

您定义(或根本不定义)变量的方式会给您带来麻烦。

首先,放弃var关键字。 绝对没有理由使用它。 var在全局 scope 中定义变量,并允许重新分配它们。 除了永远不会显着改变的最小脚本外,您真的永远不应该使用全局变量。 在极少数情况下,您实际上想要重新分配一个变量,但如果您这样做,请使用let关键字,因为那样您至少有块级范围。

其次,在中途你有四个变量定义错误,根本没有任何关键字。 JavaScript 语法定义一个变量是不正确的,如下所示:

// wrong! this is correct in Python but not JS

varName = <value>;

您需要使用letconstvar之一。 建议使用const

重写你的代码以使用正确的变量定义,看看你是否可以用一种不重新分配变量来获得奖励积分的方式来编写你的代码。 然后您应该会发现您的代码不会产生意外的结果。

祝你好运

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM