Skip to content

Commit 1f28af4

Browse files
committed
fixup
1 parent 939cf3f commit 1f28af4

File tree

4 files changed

+348
-343
lines changed

4 files changed

+348
-343
lines changed

lib/api/api-request.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
const assert = require('node:assert')
44
const { Readable } = require('./readable')
5-
const { InvalidArgumentError, AbortError } = require('../core/errors')
5+
const { InvalidArgumentError, RequestAbortedError } = require('../core/errors')
66
const util = require('../core/util')
77
const { getResolveErrorBodyCallback } = require('./util')
88
const { AsyncResource } = require('node:async_hooks')
@@ -57,6 +57,7 @@ class RequestHandler extends AsyncResource {
5757
this.highWaterMark = highWaterMark
5858
this.signal = signal
5959
this.reason = null
60+
this.removeAbortListener = null
6061

6162
if (util.isStream(body)) {
6263
body.on('error', (err) => {
@@ -66,10 +67,13 @@ class RequestHandler extends AsyncResource {
6667

6768
if (this.signal) {
6869
if (this.signal.aborted) {
69-
this.reason = this.signal.reason ?? new AbortError()
70+
this.reason = this.signal.reason ?? new RequestAbortedError()
7071
} else {
7172
this.removeAbortListener = util.addAbortListener(this.signal, () => {
72-
this.reason = this.signal.reason ?? new AbortError()
73+
this.removeAbortListener?.()
74+
this.removeAbortListener = null
75+
76+
this.reason = this.signal.reason ?? new RequestAbortedError()
7377
if (this.res) {
7478
util.destroy(this.res, this.reason)
7579
} else if (this.abort) {
@@ -152,6 +156,9 @@ class RequestHandler extends AsyncResource {
152156
onError (err) {
153157
const { res, callback, body, opaque } = this
154158

159+
this.removeAbortListener?.()
160+
this.removeAbortListener = null
161+
155162
if (callback) {
156163
// TODO: Does this need queueMicrotask?
157164
this.callback = null
@@ -166,8 +173,6 @@ class RequestHandler extends AsyncResource {
166173
queueMicrotask(() => {
167174
util.destroy(res, err)
168175
})
169-
} else if (this.removeAbortListener) {
170-
this.removeAbortListener()
171176
}
172177

173178
if (body) {

test/client-request.js

Lines changed: 39 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -135,45 +135,45 @@ test('request hwm', async (t) => {
135135
await t.completed
136136
})
137137

138-
// test('request abort before headers', async (t) => {
139-
// t = tspl(t, { plan: 6 })
140-
141-
// const signal = new EE()
142-
// const server = createServer((req, res) => {
143-
// res.end('hello')
144-
// signal.emit('abort')
145-
// })
146-
// after(() => server.close())
147-
148-
// server.listen(0, () => {
149-
// const client = new Client(`http://localhost:${server.address().port}`)
150-
// after(() => client.destroy())
151-
152-
// client[kConnect](() => {
153-
// client.request({
154-
// path: '/',
155-
// method: 'GET',
156-
// signal
157-
// }, (err) => {
158-
// t.ok(err instanceof errors.RequestAbortedError)
159-
// t.strictEqual(signal.listenerCount('abort'), 0)
160-
// })
161-
// t.strictEqual(signal.listenerCount('abort'), 1)
162-
163-
// client.request({
164-
// path: '/',
165-
// method: 'GET',
166-
// signal
167-
// }, (err) => {
168-
// t.ok(err instanceof errors.RequestAbortedError)
169-
// t.strictEqual(signal.listenerCount('abort'), 0)
170-
// })
171-
// t.strictEqual(signal.listenerCount('abort'), 2)
172-
// })
173-
// })
174-
175-
// await t.completed
176-
// })
138+
test('request abort before headers', async (t) => {
139+
t = tspl(t, { plan: 6 })
140+
141+
const signal = new EE()
142+
const server = createServer((req, res) => {
143+
res.end('hello')
144+
signal.emit('abort')
145+
})
146+
after(() => server.close())
147+
148+
server.listen(0, () => {
149+
const client = new Client(`http://localhost:${server.address().port}`)
150+
after(() => client.destroy())
151+
152+
client[kConnect](() => {
153+
client.request({
154+
path: '/',
155+
method: 'GET',
156+
signal
157+
}, (err) => {
158+
t.ok(err instanceof errors.RequestAbortedError)
159+
t.strictEqual(signal.listenerCount('abort'), 0)
160+
})
161+
t.strictEqual(signal.listenerCount('abort'), 1)
162+
163+
client.request({
164+
path: '/',
165+
method: 'GET',
166+
signal
167+
}, (err) => {
168+
t.ok(err instanceof errors.RequestAbortedError)
169+
t.strictEqual(signal.listenerCount('abort'), 0)
170+
})
171+
t.strictEqual(signal.listenerCount('abort'), 2)
172+
})
173+
})
174+
175+
await t.completed
176+
})
177177

178178
test('request body destroyed on invalid callback', async (t) => {
179179
t = tspl(t, { plan: 1 })

0 commit comments

Comments
 (0)