mysql - 在node,js中等待MySQL查询执行

标签 mysql node.js

我在node.js中使用mysql。其中有一个嵌套查询。但它不会等待内部查询完成。我不明白回调和其他功能。我的代码就像。

exports._getItems=function(req,res){
    let categoryId=req.query.categoryPost;
    console.log(categoryId+"re")
    con.query("SELECT item_id FROM shop_products where category_id =?",[categoryId], function (err, result, fields) {
        if (err) throw res.status(403);
        else
        {   
            console.log("jhcsdcshd");
            var parsedResult = JSON.parse(JSON.stringify(result));
            let itemsData="";
            for (var i = 0; i < parsedResult.length; i++)
            {
                let item_id=parsedResult[i].item_id;
                console.log("Item_id is"+item_id)
                con.query("SELECT id,modelNo FROM items where id =?",[item_id], function  async(err1, result1, fields1,callback) {
                    if (err1) throw res.status(403);
                    else
                    { 
                        var parsedResult1=JSON.parse(JSON.stringify(result1));
                        console.log(parsedResult1)
                        itemsData=itemsData+parsedResult1[0].id;
                        console.log("dddd"+itemsData);
                        if(i=parsedResult.length)
                        {
                            console.log("here");
                            console.log("Data"+itemsData)
                            res.status(200).send(itemsData);
                        }
                    }
                });
                console.log("ppppppp"+itemsData);

            }

        }
    });
}

我只是希望如果有人能告诉我到底如何根据我的代码等待内部查询执行。如果有人能帮助我,我将非常感激。谢谢

最佳答案

你不能在for循环中调用mysql查询,你必须等待执行。这是您的解决方案

exports._getItems = function (req, res) {
let categoryId = req.query.categoryPost;
console.log(categoryId + "re")
con.query("SELECT item_id FROM shop_products where category_id =?", [categoryId], function (err, result, fields) {
    if (err) throw res.status(403);
    else {
        console.log("jhcsdcshd");
        var parsedResult = JSON.parse(JSON.stringify(result));
        let itemsData = "";
        var promises = [];
        for (var i = 0; i < parsedResult.length; i++) {
            let item_id = parsedResult[i].item_id;
            console.log("Item_id is" + item_id);
            promises.push(runQuery(con, item_id))
        }

        Promise.all(promises)
            .then((data) => {
                for (var i = 0; i < data.length; i++) {
                    var parsedResult1 = JSON.parse(JSON.stringify(data[i]));
                    console.log(parsedResult1)
                    itemsData = itemsData + parsedResult1[0].id;
                    console.log("dddd" + itemsData);
                    if (i = parsedResult.length) {
                        console.log("here");
                        console.log("Data" + itemsData)
                        res.status(200).send(itemsData);
                    }
                }
            })
            .catch((error) => {
                throw res.status(403);
            })

    }
})

}

function runQuery(con, item_id) {
return new Promise((resolve, reject) => {
    con.query("SELECT id,modelNo FROM items where id =?", [item_id], function (err1, result1) {
        if (err1) {
            reject(err1);
        } else {
            resolve(JSON.parse(JSON.stringify(result1)));
        }
    })
});

}

关于mysql - 在node,js中等待MySQL查询执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58690729/

相关文章:

javascript - 我正在将 ajax 请求传递到另一个远程服务器以获取访问记录

javascript - 我应该从源代码构建 Node.js 还是下载 OS X 安装程序?

node.js - 如果 header 中不存在 JWT token ,如何执行某些逻辑?

javascript - 无法在 Node.js 的 ES6 中定义的类中调用方法

mysql - 需要帮助格式化 MySQL 查询的 CONCAT()

php - 如何在mysql中进行多表选择中的文本搜索

php - 将数据卸载到另一个数据库表和缓存

java - Maven 如何为 create-schema 命令指定 sql 文件的目录

node.js - 使用 Gulp/Node 将 json 转换为 yaml

javascript - 如何在 NodeJS 中的 .txt 文件中添加新行文本