Я использую nodejs с oracle-db модуль. я объясню код как можно проще. сначала я получу информацию о столбцах (имя столбца, тип данных, длина ....), затем я получу данные из каждого столбца и, наконец, добавлю данные в конкретный столбец и верну все столбцы. проблема в том, что я не могу получить данные из обратного вызова. Спасибо за вашу помощь.nodejs oracledb получить данные от обратного вызова
var oracledb = require('oracledb');
function getRows(columnName, tableName) {
var values = [] ;
oracledb.getConnection({user: "hr", password: "oracle"},
function(err, connection)
{
if (err) {console.error(err.message);return;}
connection.execute("select "+ columnName +" from "+tableName+" ",
function(err, result)
{
if (err) {console.error(err.message); return;}
var i = 0 ;
if ( i < result.rows.length) {
values.push({rownumber: i, value: result.rows[i][0] });
i++; }
return values;
});
});
return values;
}
function getColumns() {
var Columns = [] ;
oracledb.getConnection({ user: "hr", password: "oracle" },
function(err, connection) {
if (err) { console.error(err.message); return;}
connection.execute("select distinct table_name, column_name, data_type, data_precision, data_length,GLOBAL_STATS, NULLABLE from all_tab_columns where owner like 'HR' order by table_name ",
function(err, result) {
if(err){
console.error(err.message);
doRelease(connection);
return;}
var k = 0;
if(k < result.rows.length) {
//get data from each column
var values = getRows(result.rows[k][1], result.rows[k][0]);
//get the name of the table and the column name
Columns.push({id: k, columnName: result.rows[k][1],tableName: result.rows[k][0], values: values });
k++;
}
});
});
return Columns;
}
console.log(getColumns());
Это, я думаю, законный вопрос. Проблема в общем случае - это то, что называется «Callback Hell», потому что внутри функции getColumns() существует много асинхронной активности. В настоящее время я пытаюсь выяснить ту же проблему прямо сейчас - опубликую ответ, если я это выясню. –