Как я могу вернуть значение из функции после закрытия соединения Oracle DB внутри программы nodejs - PullRequest
0 голосов
/ 06 марта 2020

Вот что я пытаюсь. Наконец, я возвращаю номер счета, чтобы я мог использовать его в другой функции, но кажется, что значение должно быть возвращено до закрытия соединения или любым другим способом. Не могли бы вы помочь мне определить, что можно изменить здесь, чтобы я мог использовать возвращаемое значение.

PS: Это программа Nodejs, использующая соединение Oracle DB.

function getShipmentData(shipment){
  var defer = q.defer();
  var tnt_account_number;
  var account_number;
  var dhl_account_number;
  var place_to_bil;
  var freight_terms_shp;
  var place_to_repair;
  var shipment_id;
  oracledb.outFormat = oracledb.OBJECT;
  console.log("before getConnection")
  oracledb.getConnection(
  {
    user          : settings.ora_db_user,
    password      : settings.ora_db_password,
    connectString : settings.ora_db_host+':'+settings.ora_db_port+'/'+settings.ora_db_service
  }, 
  function(err, connection)
  {
    console.log("After getConnection")
    if (err) {
      writeDebug({'error':err.message});
      defer.reject(err);
    }


    const shipment_sql = `select r.PLACE_ID_TO_BILL as Place_TO_BILL, s.freight_terms_shp as Freight_Terms, 
    r.PLACE_ID_SHIP_TO as Place_To_Repair, s.shipment_id as Shipment_ID
    from shipment s inner join request r on s.request_id = r.request_id
    where s.shipment_id = :SHIPMENT_ID`

    var bindVars = {
      SHIPMENT_ID: shipment
    };

    connection.execute(
      shipment_sql,
      bindVars,

      function(err, result)
      {
        var row;

        if (err) {
          console.log("Error:", err)
          connection.close();
          defer.reject(err);
        }

        var results = result.rows

        Object.keys(results).forEach(function(key){
            row = results[key];

            place_to_bil = row.PLACE_TO_BILL
            freight_terms_shp = row.FREIGHT_TERMS
            place_to_repair = row.PLACE_TO_REPAIR
            shipment_id = row.SHIPMENT_ID

            console.log("place_to_bil from Data:",place_to_bil);
            console.log("freight_terms from Data:",freight_terms_shp);
            console.log("place_to_repair from Data:",place_to_repair);
            console.log("shipment_id from Data:",shipment_id);
        })

        function getAccountNumber(){
          if(freight_terms_shp == 'ABHTC') {
            if(place_to_repair == 'MYTPIC-401' && place_to_bil == 'GTHBYR-001')
                 tnt_account_number = '8934734';

            else if (place_to_repair == 'CNHBNT-40000' && place_to_bil == 'CBCINF-001') {
                 tnt_account_number = '3489523';
              }

          else   tnt_account_number = '5438648';
          }
          return tnt_account_number;
        }

        account_number = getAccountNumber();
        console.log("TNT Account Number before closing connection:", account_number)
        connection.close();
        console.log("TNT Account Number after closing connection:", account_number)
        defer.resolve(result.rows);
      });
  });
  console.log("Account Number getting returned?", account_number);
  return account_number;
}
...