задержка в 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(); }); }); } Возможно вопрос банален... знаю, что чего-то не понимаю... поэтому прошу помощи... заранее благодарен!! |
ну я так понял, что проблема у тебя как раз в том, что ты проверяешь в массиве DBusers, а не в самой базе, ты же сам себе дал ответ на свой вопрос
Цитата:
типа function GetUserArrayOrDB(nnn, ppp, ggg, callback) { //===и уже в этом callback делать дальше, что надо } |
Часовой пояс GMT +3, время: 21:31. |