Асинхронная функция
Добрый день. Есть асинхронная функция которая берет данные из таблицы.
Если я напишу так, результат выведется в консоль, все хорошо, данные есть:
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. Получается мне надо переделать функцию, или можно оставить и обновлять данные по другому?:-? В базе данные обновляются без моего вмешательства. |
Artur_Hopf,
Ну ошибка же понятна и ясна. Даже написано как её решить. Вызывайте sql.close() после запроса. А вообще должно быть тогда как-то так
const model = require('./model');
...
io.on('connection', function(socket){
setInterval(async function() {
const response = await model.data();
socket.emit('data1', response)
}, 1000);
});
Ну и обработку ошибок не забывать. |
destus,
Спасибо, написал как ты сказал, конечный вариант, все работет без ошибок :
var data = async () => {
try {
const pool = await sql.connect(config);
const result = await sql.query`select * from table`;
sql.close();
return result;
} catch (err) {
console.log(err);
sql.close();
}
};
|
| Часовой пояс GMT +3, время: 16:47. |