Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在nodejs程序中关闭oracledb连接后,如何从函数返回值_Javascript_Node.js_Oracle_Node Oracledb - Fatal编程技术网

Javascript 在nodejs程序中关闭oracledb连接后,如何从函数返回值

Javascript 在nodejs程序中关闭oracledb连接后,如何从函数返回值,javascript,node.js,oracle,node-oracledb,Javascript,Node.js,Oracle,Node Oracledb,这就是我正在尝试的。最后,我返回帐号,以便在另一个函数中使用它,但似乎应该在关闭连接之前或通过任何不同的方法返回该值。您能否帮助我确定此处可以更改哪些内容,以便我可以利用返回值 PS:这是一个Nodejs程序,使用Oracle DB连接 function getShipmentData(shipment){ var defer = q.defer(); var tnt_account_number; var account_number; var dhl_account_numb

这就是我正在尝试的。最后,我返回帐号,以便在另一个函数中使用它,但似乎应该在关闭连接之前或通过任何不同的方法返回该值。您能否帮助我确定此处可以更改哪些内容,以便我可以利用返回值

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;
}

您不能从回调函数返回值。您是否继承了需要维护的旧代码库?我看到了一种奇怪的回调和基于q的承诺的混合。您应该放弃使用q,转而使用本机承诺(即使只是为了减少依赖性)。在异步模式上完成本系列:然后查看本系列关于构建RESTAPI的内容:@DanMcGhan,是的,这是我列表中的下一个。