powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Серверный JavaScript (Node.js, Ringo, Nitro, Sling) [игнор отключен] [закрыт для гостей] / Nodejs обработка данных полученных от postgres
7 сообщений из 7, страница 1 из 1
Nodejs обработка данных полученных от postgres
    #39702220
ncux199rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Как дождаться данных из 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
Nodejs обработка данных полученных от postgres
    #39702293
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ncux199rus,

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

Ну есть только один способ с этим бороться это Promise
или современное async await
...
Рейтинг: 0 / 0
Nodejs обработка данных полученных от postgres
    #39702763
ncux199rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Nodejs обработка данных полученных от postgres
    #39703025
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ncux199rusПопробовал переписать под promice.

Надо под promise.

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


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