Показать сообщение отдельно
  #1 (permalink)  
Старый 20.06.2019, 10:49
Новичок на форуме
Отправить личное сообщение для larioninsta Посмотреть профиль Найти все сообщения от larioninsta
 
Регистрация: 20.06.2019
Сообщений: 1

задержка в nodejs
Доброго времени! прошу помощи, ибо нет больше идей(
Код на nodejs. задача проста, есть MySQL и массив 'DBusers'(в нем иногда лежат данные из ранних запросов).
функция findUserDB ищет пользователя в базе и если есть то добавляет его в массив.
функция findArrayUser ищет пользователя в массиве и если его там нет, то вызывает findUserDB, и потом снова проверяет массив.
Проблема: заключается в том что, добавление в базу и в массив занимает время, а следовательно после первого прохода функции findArrayUser ничего не получаю, даже если пользователь есть и он добавлен в массив DBusers. Исправляет проблему SetTimeout(50ms), но кажется что это не правильно.

Код:

var DBusers = [];

function findUserDB(user_id) {
pool.getConnection(function (err, connection) {
connection.query('SELECT * FROM users WHERE id = ?', [user_id], function (err, resultDB) {
console.log(JSON.stringify(resultDB));
if (resultDB.length != 0) {
DBusers.push(resultDB[0]);
console.log('Записали в ARRAY');
}
connection.release();
});
});
}

function findArrayUser(user_id){
var user = 'none';
DBusers.some(function (value, index) {
if(value['id'] == user_id){
console.log('нашли пользователя в ARRAY');
user = value;
return value['id'] == user_id;
}
});
if(user == 'none'){
console.log('НЕ нашли пользователя в ARRAY, смотрим в базе');
findUserDB(user_id);

НЕ СОГЛАСОВАНИЕ ВРЕМЕНИ ПРОИСХОДИТ ТУТ(findUserDB вроде как добавил, но DBusers.some еще не видит)

DBusers.some(function (value, index) {
if(value['id'] == user_id){
console.log('нашли пользователя в ARRAY');
user = value;
return value['id'] == user_id;
} else {
user = 'no DB';
}
});
}
if(user == 'no DB'){
return JSON.stringify('user not found');
} else {
return JSON.stringify(user);
}
}


Есть возможность в findUserDB сразу вернуть данные пользователя если он есть?
что-то вроде(прошу извинить за подобный код...):

function findUserDB(user_id) {
pool.getConnection(function (err, connection) {
connection.query('SELECT * FROM users WHERE id = ?', [user_id], function (err, resultDB) {
console.log(JSON.stringify(resultDB));
if (resultDB.length != 0) {
DBusers.push(resultDB[0]);
console.log('Записали в ARRAY');
>>>> return resultDB;(ПОНИМАЮ что это в таком виде работать не может)
}
connection.release();
});
});
}

Возможно вопрос банален... знаю, что чего-то не понимаю... поэтому прошу помощи...
заранее благодарен!!
Ответить с цитированием