1

Использую такую логику для вывода сообщение из базы данных при загрузке страницы, но проблема в выгрузке сообщений только при соединение к серверу,а мне нужно событийное,что-бы не перезагружать страницу.

workDb.js

var pool = require('./connect').pool;
var promise = require('promise');

module.exports = new promise(function(resolve,reject){
pool.connect(function(err,client,done){
    client.query('SELECT id, "nameChat", user_id FROM public.chat;' 
,function(err,result){
        resolve(result);
        done();
    });
   });
 })

app.js

 var con = require('./db/WorkDate');

 con.then(function(res){    
    socket.emit('allMessage', res);
 });

пытаюсь реализовать вот такую логику,она не работает. Как с промиса вернуть занчение?

      socket.emit('allMessage',con.then(function(res){
    return res}));

maun.js на стороне клиента

socket.on('allMessage',function(date){

$scope.nameChat = date.rows[0].nameChat;
});

используя из app.js первый пример я получаю данные, используя второй пример я получаю [object Object]NaN

  • Да у Вас все правильно написано. Только во втором примере вы в сокет отправляете в качестве нагрузки не res, а промис в состоянии pending. Хотите послать res - обязательно дожидаться резолва промиса. Я только не понял в чем проблема? Что значит "что-бы не перезагружать страницу"? – muturgan Dec 14 '18 at 18:53
  • Вопрос не совсем ясен. Что не так с первым примером? Что делает функция con? – Alexandr Tovmach Dec 14 '18 at 19:22
  • Дополнил для большей картины – Антон Прохоров Dec 14 '18 at 19:32
  • как я и сказал, во втором примере вы посылаете по сети не данные (res), а объект типа промис в состоянии pending. теперь вы это проиллюстрировали еще наглядней. дождитесь на сервере разрешения промиса и отправляйте результат. и все же - а чем не устраивает первый (рабочий) вариант? – muturgan Dec 14 '18 at 19:54
  • п.с. а ошибочку err в файле workDb.js я все же обработал бы – muturgan Dec 14 '18 at 19:56
  • 1
    если просто не нравится заворачивать emit в then и хочется писать более декларативно, то предлагаю: var myAsyncFunc = async function() { var con = require('./db/WorkDate'); var res = await con; socket.emit('allMessage', res); } myAsyncFunc (); или вообще async (var res = await require('./db/WorkDate'); socket.emit('allMessage', res);)(); – muturgan Dec 14 '18 at 20:11
  • Спасибо) Хотелось грамматно сделать – Антон Прохоров Dec 14 '18 at 20:16
  • io.on('connection', async function (socket) {socket.emit('allMessage', await con.then(function (res) { return res; }));} Решение проблемы) – Антон Прохоров Dec 18 '18 at 19:18

0 Answers0