From 8032fbad43e801b332191b2e0862e177947392af Mon Sep 17 00:00:00 2001 From: Alex Zlotnik Date: Mon, 22 Aug 2022 13:33:51 -0700 Subject: [PATCH] Catch errors client throws in pool (#2569) * Catch errors client throws in pool * Add a test This test _should be_ right --- packages/pg-pool/index.js | 32 ++++++++++++++----------- packages/pg-pool/test/error-handling.js | 11 +++++++++ 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/packages/pg-pool/index.js b/packages/pg-pool/index.js index 5e846bb3..20dbe734 100644 --- a/packages/pg-pool/index.js +++ b/packages/pg-pool/index.js @@ -406,20 +406,24 @@ class Pool extends EventEmitter { client.once('error', onError) this.log('dispatching query') - client.query(text, values, (err, res) => { - this.log('query dispatched') - client.removeListener('error', onError) - if (clientReleased) { - return - } - clientReleased = true - client.release(err) - if (err) { - return cb(err) - } else { - return cb(undefined, res) - } - }) + try { + client.query(text, values, (err, res) => { + this.log('query dispatched') + client.removeListener('error', onError) + if (clientReleased) { + return + } + clientReleased = true + client.release(err) + if (err) { + return cb(err) + } else { + return cb(undefined, res) + } + }) + } catch (err) { + return cb(err) + } }) return response.result } diff --git a/packages/pg-pool/test/error-handling.js b/packages/pg-pool/test/error-handling.js index 0a996b82..f514bd79 100644 --- a/packages/pg-pool/test/error-handling.js +++ b/packages/pg-pool/test/error-handling.js @@ -37,6 +37,17 @@ describe('pool error handling', function () { }) }) + it('Catches errors in client.query', async function () { + await expect((new Pool()).query(null)).to.throwError() + await expect(async () => { + try { + await (new Pool()).query(null) + } catch (e) { + console.log(e) + } + }).not.to.throwError() + }) + describe('calling release more than once', () => { it( 'should throw each time',