2016-10-14 9 views
0

node.jsバックエンドAPIを作成するときにoracledb npm packageを使用してDBとの接続を確立しています。私はconsole.log(result.rows)oracledb npmパッケージを使用した場合の結果を返します

以下は、私が他のファイルからgetDbConnection関数を呼び出す機能コード

 getDbConnection: function(query) { 

      var connectInfo= [EnvConfig.getConnectionHostName(), EnvConfig.getConnectionPort()]; // Array of hostname and port 
      var connectHost = connectInfo.join(':'); // join hostname and port with ':' 
      var connectionAttr = [connectHost, EnvConfig.getConnectionSID()]; // hostname:port and SID 
      var connectString = connectionAttr.join('/'); // creating the connection string like 'hostname:port' 
      console.log(connectString); 

      // creating a oracle connection 
      oracledb.getConnection(
       { 
        user: EnvConfig.getConnectionUserName(), 
        password: EnvConfig.getConnectionPassword(), 
        connectString: connectString 
       }, 
       function (err, connection) { 
        if(err) { 
         console.log(err.message); 
         return; 
        } 
        connection.execute(
         query, function(err, result) { 
          if(err) { 
           console.log(err.message); 
           return; 
          } 
          console.log(result.rows); // I get result here 
          return result.rows; // return result on success 
         } 
        ); 
       } 
      );   
     } 

でやるときの結果を得ることができていると私はconsole.log(getDbConnection(query))のように()はconsole.logとき。結果は未定義です。これをどのように解決すればいいですか?

答えて

1

このようなデータを取得することはできません。このように戻るには、ここに

ないつもり動作します、それは非同期自然の中で動作するので、あなたはこの

DbConnection: function(query,callback) {//pass callback as parameter 

    var connectInfo = [EnvConfig.getConnectionHostName(), EnvConfig.getConnectionPort()]; // Array of hostname and port 
    var connectHost = connectInfo.join(':'); // join hostname and port with ':' 
    var connectionAttr = [connectHost, EnvConfig.getConnectionSID()]; // hostname:port and SID 
    var connectString = connectionAttr.join('/'); // creating the connection string like 'hostname:port' 
    console.log(connectString); 

    // creating a oracle connection 
    oracledb.getConnection({ 
     user: EnvConfig.getConnectionUserName(), 
     password: EnvConfig.getConnectionPassword(), 
     connectString: connectString 
    }, 
    function(err, connection) { 
     if (err) { 
     console.log(err.message); 
     return callback(err); 
     } 
     connection.execute(
     query, 
     function(err, result) { 
      if (err) { 
      console.log(err.message); 
      return callback(err); 
      } 
      console.log(result.rows); // I get result here 
      return callback(null,result.rows); // return result on success 
     } 
    ); 
    } 
); 
} 

のようにその結果を取得し、この

のようにコールするコールバック関数を使用するための一つのことを行うことができます
//Use your function with callback 
getDbConnection(query,function(err,result){ 
    if(!err){ 
    console.log(result) 
    } 
}) 
+0

私はそれが非同期呼び出しの問題であることを知っていましたが、解決方法を理解できませんでした。ありがとうございました。私は可能な限りこれを答えたものとしてマークします。 –

+0

よろしくお願いします。乾杯!!! – abdulbarik

関連する問題