Почему моя попытка получить строки из SQL-запроса в глобальную переменную в моем скрипте дает только пустой массив? - PullRequest
0 голосов
/ 11 декабря 2019

Я пытаюсь подключиться к базе данных MYSQL и получить все адреса электронной почты в таблице. Я использую обещания, и я попытался установить глобальный массив, который в конечном итоге будет содержать адреса. Однако после запуска моего кода он пуст. Мой код:

var mysql = require('mysql');
var async = require('async');
function DBconnect(){
    return new Promise((resolve,reject)=>{
        resolve(
            mysql.createConnection({
                        host:"0.0.0.0",
                        user: "mysqldbadmin",
                        password: "mypassword",
                        database: "myDB"
                    })
        )
    })

}

var emailArr = new Array(); //winds up empty, should not be
DBconnect().then(result =>{

    var validUsers = new Array();
    result.connect(function(err){
                   if (err){
                    throw err;
                   }
                   result.query(" select users_email from site_users left join site_usermeta on ( site_users.id = site_usermeta.user_id) where (meta_value LIKE '%spec1%' OR meta_value LIKE '%spec2%') and meta_key=\"site_capabilities\" ",
                    function(err, res, fields){
                           if(err)
                               throw err;

                               var i = 0;
                               for (i = 0; i < res.length; i++){
                                   validUsers[i] = res[i].users_email;

                               }
                            console.log(validUsers); // THIS prints out what I need
                            emailArr = validUsers;

                         result.end(function(err){});
                       });

                   })
})
console.log(emailArr);

Мне нужно emailArr для хранения строковых значений;Они понадобятся мне позже в моем сценарии. Как мне это сделать?

1 Ответ

0 голосов
/ 01 января 2020

Поскольку ваш оператор журнала выполняется до того, как данные возвращаются из базы данных. Ваше соединение с базой данных и запрос выполняются асинхронно.

Попробуйте поставить console.log(emailArr); после emailArr = validUsers;. Вы увидите, что оно имеет значение, которое вы вложили в него.

...