diff --git a/lib/internal/http2/core.js b/lib/internal/http2/core.js index eda587bc51e..9d3f9b84b7d 100644 --- a/lib/internal/http2/core.js +++ b/lib/internal/http2/core.js @@ -1034,7 +1034,7 @@ function setupHandle(socket, type, options) { // If the session has been destroyed, go ahead and emit 'connect', // but do nothing else. The various on('connect') handlers set by // core will check for session.destroyed before progressing, this - // ensures that those at l`east get cleared out. + // ensures that those at least get cleared out. if (this.destroyed) { process.nextTick(emit, this, 'connect', this, socket); return; @@ -2126,7 +2126,7 @@ class Http2Stream extends Duplex { } [kProceed]() { - assert.fail('Implementors MUST implement this. Please report this as a ' + + assert.fail('Implementers MUST implement this. Please report this as a ' + 'bug in Node.js'); } @@ -3380,8 +3380,13 @@ function connect(authority, options, listener) { ObjectDefineProperty(connect, promisify.custom, { __proto__: null, value: (authority, options) => { - return new Promise((resolve) => { - const server = connect(authority, options, () => resolve(server)); + return new Promise((resolve, reject) => { + const server = connect(authority, options, () => { + server.removeListener('error', reject); + return resolve(server); + }); + + server.once('error', reject); }); }, }); diff --git a/test/parallel/test-http2-client-promisify-connect-error.js b/test/parallel/test-http2-client-promisify-connect-error.js new file mode 100644 index 00000000000..44ff4a28181 --- /dev/null +++ b/test/parallel/test-http2-client-promisify-connect-error.js @@ -0,0 +1,24 @@ +'use strict'; + +const common = require('../common'); + +if (!common.hasCrypto) + common.skip('missing crypto'); +const assert = require('assert'); +const http2 = require('http2'); +const util = require('util'); + +const server = http2.createServer(); + +server.listen(0, common.mustCall(() => { + const port = server.address().port; + server.close(() => { + const connect = util.promisify(http2.connect); + connect(`http://localhost:${port}`) + .then(common.mustNotCall('Promise should not be resolved')) + .catch(common.mustCall((err) => { + assert(err instanceof Error); + assert.strictEqual(err.code, 'ECONNREFUSED'); + })); + }); +}));