Использование Memcache и Mysql вместе
Использую модули mysql2 и memcached
Хочу делать запросы в бд если нужное не найдено в Memcache, но так как запросы асинхронные приходится использовать callback для mysql, но тогда код внутри не выполнится если запрос не будет произведен. То есть получается подобная конструкция (упрощено и без условий на наличие):
memcached.getMulti(['processed_msg'], function (err, data) {
connection.query('SELECT * FROM `users` WHERE id = ? ', [Id], function (error, results, fields) {
...код обработки
});
});
Думаю смысл понятен. Как переделать так чтоб реализовать задуманное?
Ответы (1 шт):
Автор решения: Red Woolf
→ Ссылка
Похоже вариантов кроме использования Promise API нету. Код с использованием промисов:
(async() => {
let data = await new Promise((resolve, reject) => {
memcached.getMulti(['processed_msg'], function (err, data) {
if(err) reject(err);
if(data) resolve(data);
});
});
if(!data){
data = await new Promise((resolve, reject) => {
connection.query('SELECT * FROM `users` WHERE id = ? ', [Id], function (error, [results], fields) {
reject(error);
resolve(results);
});
});
}
console.log(data);
})();