2015-07-08 8 views
1

Я использую 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()); 
+0

Это, я думаю, законный вопрос. Проблема в общем случае - это то, что называется «Callback Hell», потому что внутри функции getColumns() существует много асинхронной активности. В настоящее время я пытаюсь выяснить ту же проблему прямо сейчас - опубликую ответ, если я это выясню. –

ответ

0

Упростите свой код и отлаживайте. Кроме того, попробуйте просто использовать одноразовое соединение (или, по крайней мере, освободить оба соединения, чтобы избежать утечки соединения).

Смежные вопросы