AdonisJS 无法 return 函数内响应 (SAP HANA)

AdonisJS unable to return response within a function (SAP HANA)

我在我的 AdonisJS 项目中使用 SAP HANA CLIENT for NodeJS。我无法从连接到数据库的函数中 return 作为 json 的响应。这是代码

首先调用控制器方法validateInvoice

async validateInvoice({request, response}) {
  const req = request.all()
  const inv_num = req.invoice_num;
  const data = await this.fetchInvStatus(inv_num);
  return response.json({success: true, data: data});
}

这又会调用 fetchInvStatus 实际连接到 HANA DB 的方法

var conn = hana.createConnection();
var conn_params = {
  serverNode: '127.0.0.1:30015',
  uid: 'CUST_USER_ROLE_ADMIN',
  pwd: 'Welcome@1234',
  database: 'DED'
};

conn.connect(conn_params, (err) => {
  if(err) {
    return err;
  }
  conn.exec("Select * FROM SAPDED.YACSF_RRHD where INVOICE_NUMBER = ?", ['BOMT000005'],  (err, result) => {
    if (err) {
      return err;
    }
    console.log(result);
    return result;
  })
});

在控制台中我可以看到结果,但是这个结果没有传递给 validateInvoice 方法,因此 API 可以 return 响应。

第一个方法 response.json() 中的行甚至在来自 DB 的数据被 returned 之前执行。我怎样才能克服这个问题?我尝试将 return 语句添加到 conn.connectconn.exec 但没有任何帮助!

您必须return在 fetchInvStatus 方法中承诺。

function fetchInvStatus() {
 return new Promise(resolve, reject) {
  var conn = hana.createConnection();
  var conn_params = {
    serverNode: '127.0.0.1:30015',
    uid: 'CUST_USER_ROLE_ADMIN',
    pwd: 'Welcome@1234',
    database: 'DED'
  };

  conn.connect(conn_params, (err) => {
    if(err) {
      reject(err);
    }

    conn.exec("Select * FROM SAPDED.YACSF_RRHD where INVOICE_NUMBER = ?", ['BOMT000005'],  (err, result) => {
      if (err) {
        reject(err);
      }
      console.log(result);
      resolve(result);
     })
    });
   }  
}