【问题标题】:Requesting to oracle with nodejs using promises使用 Promise 向 nodejs 请求 oracle
【发布时间】:2018-03-09 05:38:32
【问题描述】:

我正在尝试在 nodejs 中的 oracle 中执行一个块函数,但我没有得到任何响应,并且在 10 秒后:

UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Mauvaise requête: Error: ORA-12170: TNS:Connect timeout occurred

与此同时,代码继续执行。这是我的工作流程:

const jwtTokenResponse: any = await authService.userLogin(req.body);

然后在用户登录

const result = await oracleHelper.executeBlockFunction(block, bindVars);

最后是函数:

  async executeBlockFunction(block: any, bindVars: any): Promise<any> {

    logger.info(`--> ` + 'executeBlockFunction : ' + config.oracle.user + ' / ');
    logger.info(`--> ` + 'executeBlockFunction : ' + config.oracle.password + ' / ');
    logger.info(`--> ` + 'executeBlockFunction : ' + config.oracle.connectString + ' / ');
    oracledb.getConnection(
      {
        user: config.oracle.user,
        password: config.oracle.password,
        connectString: config.oracle.connectString,
      }).then(function (connection) {
      logger.info(`--> connected`);
      return connection.execute(
        block,
        bindVars,
      ).then(function (result) {
        logger.info(`--> ` + result.rows);
        return connection.close();
      }).catch(function (error) {
        logger.info(`--> ` + error.message);
        return connection.close();
      });
    }).catch(function (error) {
      throw new OracleError(
        new Error(error),
      );
    });
  }

如您所见,我检查了条目,在oracledb.getConnection 之前一切正常,之后我不明白发生了什么

有人可以帮我吗?

编辑:

有关信息executeBlockFunction 内容取自 oracleDb npm 文档:

Oracle documentation link

【问题讨论】:

  • 能分享一下config.oracle.connectString的内容吗
  • 我看到这已经回答了,但这篇文章也可能有帮助:jsao.io/2017/07/…

标签: node.js oracle typescript npm promise


【解决方案1】:

您应该在executeBlockFunction函数中添加await关键字,或者删除async关键字并返回结果:

解决方案 1:

async executeBlockFunction(block: any, bindVars: any): Promise<any> {
    await oracledb.getConnection(...)

解决方案 2:

executeBlockFunction(block: any, bindVars: any): Promise<any> {
    return oracledb.getConnection(...)

或者,如果您已经使用async/await,您可以重构/简化您的代码:

async executeBlockFunction(block: any, bindVars: any): Promise<any> {
  try {
    let connection = await oracledb.getConnection({
      user: config.oracle.user,
      password: config.oracle.password,
      connectString: config.oracle.connectString,
    });
    logger.info(`--> connected`);

    let result = await connection.execute(block, bindVars);
    logger.info(`--> ` + result.rows);

    return result;
  } catch (err) {
    logger.info(`--> ` + error.message);
    throw new OracleError(err));
  } finally {
    return connection.close();
  }
}

【讨论】:

  • 您的反应实际上非常好,我是使用 nodejs 和 promises 的新手,这种简化很有意义。我会的,谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
  • 1970-01-01
  • 2020-06-07
  • 1970-01-01
  • 1970-01-01
  • 2019-05-13
  • 2018-08-19
相关资源
最近更新 更多