简体   繁体   中英

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

I have this script which doesn't seem to run down. I noticed it on the part of the variable reassignment. Code Snippet and output is shown

//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 is shown below:

latest_row_id 1
New row id 2 new market id 3
result4 2
Error during /openBetoBetoMarket. Proc_5 Error: ER_DUP_ENTRY: Duplicate entry '2' for key 'markets.PRIMARY'

As you can see, it seems to skip the first db.query and goes straight to the next variable assignment then executes the first db.query. Any Idea what im missing here? First time posting here. Thanks

The way you're defining (or simply not defining at all) your variables is leading you into trouble.

First of all, ditch the var keyword. There is absolutely no reason to use it. var defines variables in the global scope and allows them to be reassigned. You really never should use global variables except for the smallest of scripts that will never be significantly altered. There are very few instances where you are going to actually want a variable to be reassigned, but if you do, use the let keyword because then you at least have block level scoping.

Second, halfway down you have four variables incorrectly defined without any keyword at all. It is not proper JavaScript syntax to define a variable as follows:

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

varName = <value>;

You need to use one of let , const or var . const is recommended.

Re-write your code to use proper variable definition and see if you can write your code in a way that does not reassign variables for bonus points. You should then find that your code doesn't produce unexpected results.

Best of luck

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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