无法在try catch块中捕获TCP客户端错误的NodeJS

时间:2018-05-05 21:03:45

标签: node.js tcp error-handling thrift es6-class

我正在使用thrift客户端向nodejs中的远程服务器发出请求。但是我一度陷入困境。

这就是我初始化客户端连接的方式。执行Tcommand

    try {
      const TClient = Thrift.getThriftClient()
      const status = await TClient.runCommand(expCommand)
    } catch (error) {
      throw error  // I need exception to be caught here.
    }

在Thrift.getTriftClient()方法中,我使用

 getTriftClient () {
    const thriftClient = thrift.createClient(command, this.getConnection())
    return thriftClient
  }


getConnection () {
    const connection = thrift.createConnection(this.host, this.port, {
      transport: this.transport,
      protocol: this.protocol
    })

    connection.on('error', (err) => {
      logger.error(scriptName, 'Thrift connection error', err)
      throw new Error('Not able to catch this in try catch')
    })

    return connection
  }

现在我的问题是我无法重新抛出我在错误事件侦听器块中遇到的任何异常。我想要的是在第一个错误块实例中捕获异常。

我能以某种方式做到吗?

1 个答案:

答案 0 :(得分:0)

try {
  const TClient = Thrift.getThriftClient()
  const status = await TClient.runCommand(expCommand)
} catch (error) {
  throw error  // I need exception to be caught here.
}

错误处理的try / catch块方式是同步代码。

错误处理的异步/等待方式是异步代码。

你有一个await运算符,在AsyncFunction实例(异步函数)中,因此你有异步代码,因此你正在使用Promises,Promises将解析为一个值或拒绝可能是一个Error实例。

而不是同步:

try {
  const TClient = Thrift.getThriftClient()
  const status = await TClient.runCommand(expCommand)
} catch (error) {
  throw error  // I need exception to be caught here.
}

异步:

const TClient = Thrift.getThriftClient()
.then((client) => {
  return TClient.runCommand(expCommand);
})
.then((commandResult) => {
  console.log(commandResult);
})
.catch((err) => {
  throw err;
});