Skip to content

Commit d3be101

Browse files
committed
Allow a custom type to be used for Client promises
Matches the Pool API.
1 parent ff6fe1e commit d3be101

File tree

4 files changed

+34
-15
lines changed

4 files changed

+34
-15
lines changed

lib/client.js

+5-7
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ var Client = function (config) {
3131

3232
var c = config || {}
3333

34+
this._Promise = c.Promise || global.Promise
3435
this._types = new TypeOverrides(c.types)
3536
this._ending = false
3637
this._connecting = false
@@ -232,7 +233,7 @@ Client.prototype.connect = function (callback) {
232233
return
233234
}
234235

235-
return new Promise((resolve, reject) => {
236+
return new this._Promise((resolve, reject) => {
236237
this._connect((error) => {
237238
if (error) {
238239
reject(error)
@@ -409,12 +410,9 @@ Client.prototype.query = function (config, values, callback) {
409410
} else {
410411
query = new Query(config, values, callback)
411412
if (!query.callback) {
412-
let resolveOut, rejectOut
413-
result = new Promise((resolve, reject) => {
414-
resolveOut = resolve
415-
rejectOut = reject
413+
result = new this._Promise((resolve, reject) => {
414+
query.callback = (err, res) => err ? reject(err) : resolve(res)
416415
})
417-
query.callback = (err, res) => err ? rejectOut(err) : resolveOut(res)
418416
}
419417
}
420418

@@ -458,7 +456,7 @@ Client.prototype.end = function (cb) {
458456
if (cb) {
459457
this.connection.once('end', cb)
460458
} else {
461-
return new Promise((resolve) => {
459+
return new this._Promise((resolve) => {
462460
this.connection.once('end', resolve)
463461
})
464462
}

lib/native/client.js

+5-7
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ var Client = module.exports = function (config) {
2525
EventEmitter.call(this)
2626
config = config || {}
2727

28+
this._Promise = config.Promise || global.Promise
2829
this._types = new TypeOverrides(config.types)
2930

3031
this.native = new Native({
@@ -121,7 +122,7 @@ Client.prototype.connect = function (callback) {
121122
return
122123
}
123124

124-
return new Promise((resolve, reject) => {
125+
return new this._Promise((resolve, reject) => {
125126
this._connect((error) => {
126127
if (error) {
127128
reject(error)
@@ -156,7 +157,7 @@ Client.prototype.query = function (config, values, callback) {
156157
query = new NativeQuery(config, values, callback)
157158
if (!query.callback) {
158159
let resolveOut, rejectOut
159-
result = new Promise((resolve, reject) => {
160+
result = new this._Promise((resolve, reject) => {
160161
resolveOut = resolve
161162
rejectOut = reject
162163
})
@@ -196,11 +197,8 @@ Client.prototype.end = function (cb) {
196197
}
197198
var result
198199
if (!cb) {
199-
var resolve, reject
200-
cb = (err) => err ? reject(err) : resolve()
201-
result = new global.Promise(function (res, rej) {
202-
resolve = res
203-
reject = rej
200+
result = new this._Promise(function (resolve, reject) {
201+
cb = (err) => err ? reject(err) : resolve()
204202
})
205203
}
206204
this.native.end(function () {

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
},
3030
"devDependencies": {
3131
"async": "0.9.0",
32+
"bluebird": "3.5.2",
3233
"co": "4.6.0",
3334
"eslint": "4.2.0",
3435
"eslint-config-standard": "10.2.1",

test/integration/client/query-as-promise-tests.js

+23-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
'use strict'
2+
var bluebird = require('bluebird')
23
var helper = require(__dirname + '/../test-helper')
34
var pg = helper.pg
45

@@ -7,10 +8,10 @@ process.on('unhandledRejection', function (e) {
78
process.exit(1)
89
})
910

10-
const pool = new pg.Pool()
1111
const suite = new helper.Suite()
1212

1313
suite.test('promise API', (cb) => {
14+
const pool = new pg.Pool()
1415
pool.connect().then((client) => {
1516
client.query('SELECT $1::text as name', ['foo'])
1617
.then(function (result) {
@@ -31,3 +32,24 @@ suite.test('promise API', (cb) => {
3132
})
3233
})
3334
})
35+
36+
suite.test('promise API with configurable promise type', (cb) => {
37+
const client = new pg.Client({ Promise: bluebird })
38+
const connectPromise = client.connect()
39+
assert(connectPromise instanceof bluebird, 'Client connect() returns configured promise')
40+
41+
connectPromise
42+
.then(() => {
43+
const queryPromise = client.query('SELECT 1')
44+
assert(queryPromise instanceof bluebird, 'Client query() returns configured promise')
45+
46+
return queryPromise.then(() => {
47+
client.end(cb)
48+
})
49+
})
50+
.catch((error) => {
51+
process.nextTick(() => {
52+
throw error
53+
})
54+
})
55+
});

0 commit comments

Comments
 (0)