在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”这个网址中,包含了以下的描述。
这句话的意思是指Promise对象的状态是否为被拒绝。根据上述页面所述,具体区别在于Chrome的开发工具中是否使用”暂停在捕获异常”功能。
抓住之后感觉没有什么区别。