Допустим я использую node-mysql из npm для выполнения sql-запросов. С появлением node 7 и поддержки ней async/await, хотелось бы понять, как можно применить это для выполнения sql запросов? Задача в целом написать класс-обертку для node-mysql, чтобы потом можно было делать нечто вроде:
let data = new MySqlWrapper().select(query);
ну и в итоге в data
мы имеем результат выполнения запроса.
Подскажите как можно реализовать это на данном примере:
(async () => {
let getData = async ()=> {
db.query(`select * from users`,null,(err,data) =>{
console.log('ok');
return data;
});
};
var res = await getData();
//нужно чтобы в res пришли данные запроса
})();
Конструкции async/await
отлично работают не только с асинхронными функциями, но и с Обещаниями (Promises). Например, код
let select = function(query) {
return new Promise(function(resolve, reject) {
setTimeout(() => {resolve(`${query}s`)}, 1000);
});
};
async function run() {
let foos = await select('foo');
let bars = await select('bar');
console.log(`${foos} + ${bars}`);
}
run();
выведет сообщение foos + bars
через две секунды.
Эта маленькая хитрость позволит вам решить вашу проблему "малой кровью". Вы можете использовать одну из существующих библиотек, чтобы заставить ваши методы возвращать Обещания. Приведу пример того, это можно сделать используя Bluebird:
let bluebird = require('bluebird'),
asyncWrapper = (f, ctx) => bluebird.promisify(f, {context: ctx});
let mysql = new MySql();
let data = await asyncWrapper(mysql.select, mysql)(query);
При желании, вы можете написать класс, содержащий в себе новый, асинхронный API. Но эта задача тривиальна и я оставлю ее для вас :)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У меня obj loader c orbitcontrol, мне нужно не статичное освещение, чтобы фигура освещалась по мере прокрутки ее, а другие стороны затемнялись немногоЯ...
Есть код который выводит сумму чисел в массиве, без наибольшего и наименьшего значенияНе могу проверит входное значение на undefined