Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.04.2018, 09:04
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

Асинхронная функция
Добрый день. Есть асинхронная функция которая берет данные из таблицы.
Если я напишу так, результат выведется в консоль, все хорошо, данные есть:

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]
Ответить с цитированием
  #2 (permalink)  
Старый 24.04.2018, 09:16
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Artur_Hopf,
data().then(console.log).catch(console.error)
Ответить с цитированием
  #3 (permalink)  
Старый 24.04.2018, 09:21
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

destus,
Вывелось спасибо.
Ответить с цитированием
  #4 (permalink)  
Старый 24.04.2018, 09:41
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

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 работает.
Ответить с цитированием
  #5 (permalink)  
Старый 24.04.2018, 09:43
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Artur_Hopf,
2 строка откуда data?
Может так
io.on('connection', function(socket){    
    data().then(response => socket.emit('data1', response));
});
Ответить с цитированием
  #6 (permalink)  
Старый 24.04.2018, 09:50
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

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);
});


Ошибок никаких нет, просто приходит пустой массив.

Последний раз редактировалось Artur_Hopf, 24.04.2018 в 09:52.
Ответить с цитированием
  #7 (permalink)  
Старый 24.04.2018, 09:56
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

destus,
Не выходит, ладно методом проб разберусь, если что ответ скину
Ответить с цитированием
  #8 (permalink)  
Старый 24.04.2018, 09:57
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Artur_Hopf,
io.on('connection', function(socket){   
    data.then(response => socket.emit('data1', response));
});
Ответить с цитированием
  #9 (permalink)  
Старый 24.04.2018, 10:00
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

destus,
Отлично, спасибо друг
Ответить с цитированием
  #10 (permalink)  
Старый 24.04.2018, 11:28
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

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.

Получается мне надо переделать функцию, или можно оставить и обновлять данные по другому?

В базе данные обновляются без моего вмешательства.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция ориентации Castromen Общие вопросы Javascript 1 23.02.2018 17:53
Функция вызывается несколько раз KiberQ Общие вопросы Javascript 11 01.03.2017 15:45
Функция запускается кнопкой, но не запускается другой функцией или событием IndiraVarma Общие вопросы Javascript 6 30.09.2016 14:58
не вызывается функция при изменении option soft4you Общие вопросы Javascript 1 23.07.2014 17:41
AJAX функция для новых html-элементов broadcast77 AJAX и COMET 25 03.03.2014 14:01