等待在node,js中执行mysl查询

问题描述 投票:0回答:1

我正在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);

            }

        }
    });
}

[我只是想让任何人都可以告诉我,根据我的代码我该如何确切地等待内部查询执行。非常感谢任何人能帮助我。谢谢

mysql node.js
1个回答
0
投票

您不能在循环中调用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)));
        }
    })
});

}

© www.soinside.com 2019 - 2024. All rights reserved.