Гость
Форумы / Серверный JavaScript (Node.js, Ringo, Nitro, Sling) [игнор отключен] [закрыт для гостей] / Nodejs обработка данных полученных от postgres / 7 сообщений из 7, страница 1 из 1
13.09.2018, 16:27
    #39702220
ncux199rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nodejs обработка данных полученных от postgres
Добрый день.
Как дождаться данных из postgres?
Проблема в том что при попытке получить данные в массив он пишет undefined. Но при этом в console.log выводит корректные данные.

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
function connection_sql(text = 'select now();', values = []){
    row = {};
    const { Pool, Client } = require('pg');

    const client = new Client({
      user: 'cicada',
      host: '192.168.50.17',
      database: 'test',
      password: '123456',
      port: '5432'
    });
    
    //callback 
    client.connect();
    client.query(text, values, (err, res) => {     
       if (err) {
       console.log(err.stack);
     } else {
       row = res.rows;                
       console.log(row);       //выводит то что надо
     }
     client.end();     
    });
    return row;
}


module.exports.get_arr_db = function(){
    let arr = [];
    const text = 'SELECT temp1 FROM public.testdata limit 100;';
    temp = connection_sql(text);    
    arr = temp.temp1;
    console.log("arr = ", arr);  //здесь пустой массив
    return arr;
};


Console.log
arr =  undefined
[ { temp1: 420 },
  { temp1: 423 },
  { temp1: 425 },
  { temp1: 426 },
  { temp1: 428 },
  { temp1: 426 },
...


...
Рейтинг: 0 / 0
13.09.2018, 18:04
    #39702293
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nodejs обработка данных полученных от postgres
ncux199rus,

ну Вы же видите, что console.log("arr = ", arr) выполняется раньше console.log(row), ведь видите?
а всё потому, что client.query - это асинхронная операция
...
Рейтинг: 0 / 0
14.09.2018, 10:02
    #39702440
ncux199rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nodejs обработка данных полученных от postgres
skyANA,
Вижу.
Понимаю что это асинхронный вызов.
И хочу узнать как правильно с этим бороться.
...
Рейтинг: 0 / 0
14.09.2018, 11:52
    #39702543
irbis_al
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nodejs обработка данных полученных от postgres
ncux199russkyANA,
Вижу.
Понимаю что это асинхронный вызов.
И хочу узнать как правильно с этим бороться.

Ну есть только один способ с этим бороться это Promise
или современное async await
...
Рейтинг: 0 / 0
14.09.2018, 16:21
    #39702763
ncux199rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nodejs обработка данных полученных от postgres
irbis_al,
nodejs
lib - pg

Попробовал переписать под promice.
Результат тот же.


Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
//подключение бд

function connection_sql(text = 'select now();', values = []){    
    row = {};
    //const { Pool, Client } = require('pg');
    const { Client } = require('pg');
    
    const client = new Client({
      user: 'test',
      host: '192.168.50.17',
      database: 'test',
      password: '123456',
      port: '5432'
    }); 
    client.connect();

// promise
let promise = new Promise((resolve, reject) => {    
    client.query(text, values)
        .then(
        resolve => {
        console.log(resolve.rows);
            }
        )
        .catch(reject => console.error(reject.stack));
    });
    
    promise
        .then (
            result => {
                row = result.rows;
                console.log(result.rows);
            },      
        errors => {
            console.log(errors.stack);
            }
        );
    //client.end()
    console.log(1);
        return row;
}



module.exports.get_arr_db = function(){
    let arr = [];
    const text = 'SELECT temp1 FROM testdata limit 10;';   
    temp =  connection_sql(text);
    arr = temp.temp1;
    console.log("arr = ", arr);
    return arr;
};


console.log
1
a1 =  undefined
[ { temp1: 420 },
  { temp1: 423 },
  { temp1: 425 },
  { temp1: 426 },



Примеры брал отсюда npm pg https://node-postgres.com/features/queries
...
Рейтинг: 0 / 0
16.09.2018, 03:20
    #39703025
Агнец за бортом
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nodejs обработка данных полученных от postgres
ncux199rusПопробовал переписать под promice.

Надо под promise.

Рановато "под промис" - достаточно колбека.
...
Рейтинг: 0 / 0
16.09.2018, 03:35
    #39703026
Агнец за бортом
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nodejs обработка данных полученных от postgres
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
function connection_sql(callback){

    text = text || 'select now();';
    values = values || [];    
    callback = callback || function(){};
  
    const { Pool, Client } = require('pg');

    const client = new Client({
      user: 'cicada',
      host: '192.168.50.17',
      database: 'test',
      password: '123456',
      port: '5432'
    });
    
    //callback 
    client.connect();
    client.query(text, values, (err, res) => {     
       if (err) {
       console.log(err.stack);
     } else {               
       callback(res.rows);
     }
     client.end();     
    });
}

var procces_result = function(result){ //Определен тут для примера
    console.log("arr = ", result);  //здесь был  пустой массив
}

module.exports.get_arr_db = function(){ //Вообще - передать procces_result надо тут, а не определять в теле модуля
    let arr = [];
    const text = 'SELECT temp1 FROM public.testdata limit 100;';
    temp = connection_sql(text,procces_result);    
};



А то, что ты написал под промисы - полная }{ерня
...
Рейтинг: 0 / 0
Форумы / Серверный JavaScript (Node.js, Ringo, Nitro, Sling) [игнор отключен] [закрыт для гостей] / Nodejs обработка данных полученных от postgres / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]