Асинхронная функция
Добрый день. Есть асинхронная функция которая берет данные из таблицы.
Если я напишу так, результат выведется в консоль, все хорошо, данные есть: const config = { user: 'user', password: 'password', server: 'server', database: 'database' }; async function data() { try { let pool = await connect(config); let result = await pool.request() .query('select * from table'); console.log(result); } catch (err) { console.log(err); }; }; Но в консоле мне от них толку мало, вывожу так, результат не выводится: async function data() { try { let pool = await connect(config); let result = await pool.request() .query('select * from table'); return result; } catch (err) { console.log(err); }; }; console.log(data); В чем может быть дело, return возвращает вот это в консоль :-? : [AsyncFunction: data] |
Artur_Hopf,
data().then(console.log).catch(console.error) |
destus,
Вывелось спасибо.:thanks: |
destus,
Подскажи пожалуйста, я с этой функции хочу вывести с помощью socket.io таким образом: io.on('connection', function(socket){ socket.emit('data1', data); }); //на клиенте получаю это: var socket = io(); socket.on('data1', function (data) { console.log(data); }); В консле на клиенте пустой объект {} . Что я не так делаю?:( Тестовые данные типо var array = [] передаются нормально, то есть socket работает. |
Artur_Hopf,
2 строка откуда data? Может так io.on('connection', function(socket){ data().then(response => socket.emit('data1', response)); }); |
destus,
С другого файла где эта функция делаю экспорт: exports.data = data; Запускаю на основном файле: const model = require('./model'); Передаю экспортированную функцию: const data = model.data (); Проверяю что данные передаются вашим методом: data .then(console.log).catch(console.error); Данные есть, далее передаю из сокетом, и вот в этом месте данные теряются, но сокет работает передавал массивы: io.on('connection', function(socket){ socket.emit('data1', data); }); Ну и принимаю на клиенте: var socket = io(); socket.on('data1', function (data) { console.log(data); }); Ошибок никаких нет, просто приходит пустой массив. |
destus,
Не выходит, ладно методом проб разберусь, если что ответ скину :-? |
Artur_Hopf,
io.on('connection', function(socket){ data.then(response => socket.emit('data1', response)); }); |
destus,
Отлично, спасибо друг :yes: :thanks: |
destus,
Не можешь подсказать об обновлении данных? С функции мы передали данные на страницу, я воткнул set interval: io.on('connection', function(socket){ setInterval(function() { data.then(response => socket.emit('data1', response)); }, 1000); }); У клиента вывел в консоль: var socket = io(); socket.on('data1', function (data) { console.log(data); }); Да, ежесекундно с сервера приходят данные, но они не обновляются, при старте сервера он делает запрос и все, отдает то что получил, думаю проблема в асинхронной функции: async function data() { try { let pool = await connect(config); let result = await pool.request() .query('select * from table'); return result; } catch (err) { console.log(err); }; }; Если я прямо после нее делаю так: setInterval(function() { data().then(console.log).catch(console.error); }, 1000); После первого опроса выводит результат, а дальше ошибки: Error: Global connection already exists. Call sql.close() first. Получается мне надо переделать функцию, или можно оставить и обновлять данные по другому?:-? В базе данные обновляются без моего вмешательства. |
Часовой пояс GMT +3, время: 03:45. |