diff --git a/lib/fetch/request.js b/lib/fetch/request.js index 7e1b3d8eb1d..7fda8d90b28 100644 --- a/lib/fetch/request.js +++ b/lib/fetch/request.js @@ -367,9 +367,9 @@ class Request { } if (signal.aborted) { - ac.abort() + ac.abort(signal.reason) } else { - const abort = () => ac.abort() + const abort = () => ac.abort(signal.reason) signal.addEventListener('abort', abort, { once: true }) requestFinalizer.register(this, { signal, abort }) } @@ -726,12 +726,12 @@ class Request { // 4. Make clonedRequestObject’s signal follow this’s signal. const ac = new AbortController() if (this.signal.aborted) { - ac.abort() + ac.abort(this.signal.reason) } else { this.signal.addEventListener( 'abort', - function () { - ac.abort() + () => { + ac.abort(this.signal.reason) }, { once: true } ) diff --git a/test/fetch/request.js b/test/fetch/request.js index a230110983a..216d7e03bbb 100644 --- a/test/fetch/request.js +++ b/test/fetch/request.js @@ -8,6 +8,7 @@ const { Headers } = require('../../') const { kState } = require('../../lib/fetch/symbols.js') +const hasSignalReason = !!~process.version.localeCompare('v16.14.0', undefined, { numeric: true }) test('arg validation', async (t) => { // constructor @@ -270,9 +271,12 @@ test('undefined signal', t => { test('pre aborted signal', t => { const ac = new AbortController() - ac.abort() + ac.abort('gwak') const req = new Request('http://asd', { signal: ac.signal }) t.equal(req.signal.aborted, true) + if (hasSignalReason) { + t.equal(req.signal.reason, 'gwak') + } t.end() }) @@ -283,16 +287,23 @@ test('post aborted signal', t => { const req = new Request('http://asd', { signal: ac.signal }) t.equal(req.signal.aborted, false) ac.signal.addEventListener('abort', () => { - t.pass() + if (hasSignalReason) { + t.equal(req.signal.reason, 'gwak') + } else { + t.pass() + } }) - ac.abort() + ac.abort('gwak') }) test('pre aborted signal cloned', t => { const ac = new AbortController() - ac.abort() + ac.abort('gwak') const req = new Request('http://asd', { signal: ac.signal }).clone() t.equal(req.signal.aborted, true) + if (hasSignalReason) { + t.equal(req.signal.reason, 'gwak') + } t.end() }) @@ -324,9 +335,13 @@ test('post aborted signal cloned', t => { const req = new Request('http://asd', { signal: ac.signal }).clone() t.equal(req.signal.aborted, false) ac.signal.addEventListener('abort', () => { - t.pass() + if (hasSignalReason) { + t.equal(req.signal.reason, 'gwak') + } else { + t.pass() + } }) - ac.abort() + ac.abort('gwak') }) test('Passing headers in init', (t) => {