【问题标题】:How to retrieve of data from MySQL server for all items in a list in nodejs?如何从 MySQL 服务器检索 nodejs 列表中所有项目的数据?
【发布时间】:2019-07-17 06:42:15
【问题描述】:

我正在制作一个基于图表的网络程序。我正在使用nodejs。 我有一个存储顶点 ID 的键调用映射列表。 我想使用 ID 从 MySQL 中检索这些顶点的名称。我找到了一个解决方案,但我不确定它是否每次都能奏效。这是我的代码。

for(var i=0;i<map.length;++i){
    con.query('SELECT * FROM station WHERE id='+map[i],function(err,result,field){
        if(err)
            console.log("ERROR 3");
        else{
            result.forEach(function(r){
                stationName.push(r.name);
            })
            if(stationName.length==map.length){
                console.log(stationName);
                res.render('route/showroute.ejs',{stationName: stationName});
            }
        }
    })
}

我想知道我的最后一个地图查询是否可能在其他查询之前加载,这可能会导致车站名称以错误的顺序存储。我是 javascript 新手。

【问题讨论】:

    标签: mysql node.js npm


    【解决方案1】:

    您可以使用 async await 函数来做到这一点

    var getDataById = function (id) {
        return new Promise(function (resolve, reject) {
            con.query('SELECT * FROM station WHERE id=' + id, function (err, result, field) {
                if (err) {
                    console.log("ERROR 3");
                    reject(err);
                } else {
                    resolve(result);
                }
            });
        });
    };
    
    (async function () {
        for (var i = 0; i < map.length; ++i) {
            var data = await getDataById(map[i]);
            data.forEach(function (r) {
                stationName.push(r.name);
            });
            if (stationName.length == map.length) {
                console.log(stationName);
            }
        }
    })();
    

    【讨论】:

      【解决方案2】:

      您担心查询函数是异步的,它确实是,但仅与函数之后的内容有关。您正在将您的 stationNames 放入回调函数内的一个新数组中,该数组将按顺序执行。

      【讨论】:

        猜你喜欢
        • 2018-11-11
        • 2017-01-18
        • 2015-04-15
        • 2013-09-02
        • 2017-08-18
        • 2015-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多