Как получить данные с сервера MySQL для всех элементов в списке в nodejs? - PullRequest
0 голосов
/ 23 февраля 2019

Я делаю основанную на графике веб-программу.Я использую nodejs.У меня есть список ключей звонков карта, в которой хранится идентификатор вершин.Я хочу получить имя этих вершин из 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.

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Вас беспокоит асинхронность функции запроса, и это так, но только в отношении того, что следует за функцией.Вы помещаете ваши stationNames в новый массив внутри функции обратного вызова, которая будет выполняться последовательно.

0 голосов
/ 23 февраля 2019

Вы можете сделать это, используя async await function

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);
        }
    }
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...