Не удается получить результат вне функции запроса в экспресс-узле jj - PullRequest
0 голосов
/ 26 мая 2019

Я пытаюсь получить значение переменной w_name вне запроса, даже если я определил w_name до запроса, но не могу получить его после запроса. Пожалуйста, проверьте код и помощь:

connection.query('SELECT * FROM workstations WHERE id=?',[results[0].w_id],function(err,res,field){
                        w_name = res[0].name;
                });
                console.log(w_name);

console.log показывает неопределенное значение, но если я помещаю console.log в запрос после w_name, это показывает правильный результат. Что в этом плохого?

Ответы [ 2 ]

0 голосов
/ 26 мая 2019

NodeJs асинхронный, он использует обратный вызов для результатов. Насколько я знаю о вашей проблеме, наилучшее решение дано ниже:

async function myQuery(){
     return new Promise((resolve,reject)=>{
            connection.query('SELECT * FROM workstations WHERE id=?',[results[0].w_id],function(err,res,field){
                    resolve(res[0].name)
            });

     })
}

Теперь вы можете использовать then для получения значения или async await для получения значения, подобного этому.

//this is where you would like to call that function.

async function index(){
    let w_name = await myQuery()
    console.log(w_name)
}
0 голосов
/ 26 мая 2019

connection.query(...params) - асинхронная функция, которая требует некоторого времени для чтения и получения результирующих данных для запроса, переданного ей.При определении console.log(w_name) печатается неопределенное значение, поскольку результат еще не присвоен переменной w_name.Принимая во внимание, что определение его внутри функции обратного вызова присваивает значение w_name.

Проверьте эту статью для понимания асинхронного JavaScript.

           connection.query('SELECT * FROM workstations WHERE id=?', 
                    [results[0].w_id],function(err,res,field){

                    w_name = res[0].name;
                      console.log(w_name);
            });
...