#javascript #node.js #postgresql
#javascript #node.js #postgresql
Вопрос:
Я переписываю скрипт профилирования данных, который я разработал на python, на javascript, поскольку я следую курсу Wes Bos для начинающих по Javascript.
Итак, это консольный скрипт, который принимает информацию о подключении к базе данных, а также целевую таблицу в качестве входных данных. В конечном итоге он выполнит 9 разных запросов к каждому столбцу, найденному в целевой таблице, и создаст отчет.
Как я могу получить sqlOut, доступный как объект после пула.запрос, чтобы я мог перебирать его и т. Д.
Заранее спасибо.
const { Pool } = require('pg');
const pool = new Pool({
user: 'postgres',
host: 'localhost',
database: 'pps',
password: 'XXXX',
port: 5432,
});
sql = `Select column_name, data_type, character_maximum_length from information_schema.columns where table_name = 'profiling_nws6'`;
let sqlOut = [];
pool.query({ text: sql, rowMode: 'array' }, (err, result) => {
if (err) {
return console.error('Error executing query', err.stack);
}
// sqlOut.push(result.rows);
sqlOut = result.rows.slice(0);
console.log(typeof sqlOut);
console.log(Array.isArray(sqlOut));
// console.log(sqlOut);
// pool.end();
return sqlOut;
});
// now I want sqlOut available so I can do various things with the data...
console.log(sqlOut);
Ответ №1:
При выполнении запроса
pool.query({ text: sql, rowMode: 'array' }, callback);
Обратный вызов выполняется с результатами (или ошибкой)
Но этот обратный вызов может быть выполнен намного позже, чем ваш console.log
(и это так, поскольку пул должен подключиться к базе данных, отправить запрос, подождать некоторое время, затем получить результаты вашего запроса и только после этого выполнить ваш обратный вызов.
Вам нужно получить некоторые знания о Promises (или Async / Await), которые помогут вам получить ресурсы из базы данных.
Комментарии:
1. Да, из поиска в Google я знал, что promises или async / await помогут, я просто предположил, что должно быть решение и с подходом обратного вызова. Возможно, нет.
2. Проблема здесь в том, что возврат из обратного вызова нигде не используется. И его выполнение выполняется после вашего console.log