首页 > 解决方案 > Array.push 在 while 循环外为空

问题描述

如果我在循环内使用 console.log,则 Array.push 可以正常工作。但是,数组在循环外是空的。关于为什么的任何想法?

它之前工作正常,我改变了一些东西,即使我撤消了更改,数组也一直是空的。

this.router.post('/hello', async(req, res) =>{

            console.log("We are in");
            var connection = mysql.createConnection({
                host     : 'host12',
                user     : 'root12',
                password : 'password12',
                database : 'db12',

            });

            var count = req.body.count;
            console.log("the count:" +count);


            while(i<count) {

                connection.query('INSERT INTO x (DateM) VALUES ("2021-10-10")', function (error, result, field) {
                    if (error) {
                        console.log("Insert Error: " + error);
                    } else {
                        insertID = result.insertId;

                        connection.query("UPDATE table SET mitID =" +insertID "where ID=" + insertID, function (errors, results, fields) {
                            if (errors) {
                                console.log("Update Errors: " + errors);
                            } else {
                                console.log(results);
                                var cId = Q + insertID;
                                idList.push(cId);


                            }
                        });

                    }
                });
                i++;
            }
            console.log(idList);
            res.json(idList);
        });

谢谢!

标签: javascriptreactjs

解决方案


 while(i<count) {

     connection.query('INSERT INTO x (DateM) VALUES ("2021-10-10", ...
}
console.log(idList);
res.json(idList);

问题是您在那里定义了回调connection.query并进行了操作idList

这部分res.json(idList);实际上是在query完成之前运行的。

要修复它,您需要使用await.

while(i < count) {
    let {error, result, field} = await connect.query(...query);
    ...copy callback function body here

    i+++
}
...

推荐阅读