Я работаю с NodeJS, используя среду ExpressJS в бэкэнд mysql. Я запускаю запрос внутри цикла for, и мой цикл и работа потом зависят от возвращаемого значения запроса. Я не очень хорошо разбираюсь в mysql-запросе, поэтому я запускаю его через цикл for. Проблема заключается в том, что из-за асинхронности [я думаю!] Цикл for заканчивается задолго до вывода результата запроса.значение переменной становится неопределенным в NodeJS ExpressJS
Вот мой код:
function search_people_step2(user_id, search_criteria, user_friend)
{
var first_name_friends = [];
var last_name_friends = [];
for(var i = 0; i < user_friend.length; i++)
{
con.query("SELECT first_name, second_name FROM user WHERE userid = ?", user_friend[i],function(err, rows)
{
if(err)
{
//error;
}
else
{
if(rows.length == 0)
{
//nothing gets returned
}
else {
console.log(rows);
first_name_friends[i] = rows[0].first_name;
last_name_friends[i] = rows[0].second_name;
}
}
});
}
Теперь я могу получить значение (используя console.log) внутри оператора запроса, однако, на внешней стороне, то значение становится пустым (не определено), так как остальные кода уже вычислен.
Как я могу это решить? Спасибо заранее.
You не может, кроме случаев, когда существует синхронный метод для выполнения запроса. – n00dl3
Как написать синхронный метод в JS? –
Вы не можете, так как это зависит от реализации sql. Вы могли бы использовать обещания, если вы действительно хотите вернуть что-то ... – n00dl3