在Node.js中使用pg模块编写catch的方法

这是最好的。以下是捕获异常并将异常toString到消息的例外。

很好的例子。在catch块中,用Promise.reject将new Error包围起来并返回。这种写法可以知道在哪里出现了异常错误。

await this.dbClient.query("example;").catch(e => Promise.reject(new Error(e)) );
 Error: error: syntax error at or near ";"
    at dbClient.query.catch.e (自分のコード.js:44:65)
    at process._tickCallback (internal/process/next_tick.js:68:7)

不好的示例1:通过捕获异常并使用新的Error实例进行再次抛出。起初我认为这样做可以,但是抛出动作不好。

await this.dbClient.query("example;").catch(e => { throw new Error(e) });
 Error: error: syntax error at or near ";"
    at dbClient.query.catch.e (自分のコード.js:44:65)
    at process._tickCallback (internal/process/next_tick.js:68:7)

不好的例子2。这本来就没有catch的意义。堆栈跟踪从pg模块开始,我无法知道我的代码在哪里引发了异常。

await this.dbClient.query("example;").catch(e => { throw e });
 error: syntax error at or near ";"
   at Connection.parseE (node_modules\pg\lib\connection.js:553:11)
   at Connection.parseMessage (node_modules\pg\lib\connection.js:378:19)
   at Socket.<anonymous> (node_modules\pg\lib\connection.js:119:22)
   at Socket.emit (events.js:182:13)
   at addChunk (_stream_readable.js:283:12)
   at readableAddChunk (_stream_readable.js:264:11)
   at Socket.Readable.push (_stream_readable.js:219:10)
   at TCP.onread (net.js:639:20)

再来讨论一下不好的例子1。

在”http://azu.github.io/promises-book/#not-throw-use-reject”这个网址中,包含了以下的描述。

image.png

这句话的意思是指Promise对象的状态是否为被拒绝。根据上述页面所述,具体区别在于Chrome的开发工具中是否使用”暂停在捕获异常”功能。

抓住之后感觉没有什么区别。

广告
将在 10 秒后关闭
bannerAds