Skip to content

Commit 3afe357

Browse files
committed
1 parent 623229f commit 3afe357

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

source/core/index.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -251,9 +251,8 @@ export default class Request extends Duplex implements RequestEvents<Request> {
251251
this.destroy(new AbortError(this));
252252
}
253253

254-
this.options.signal?.addEventListener('abort', () => {
255-
this.destroy(new AbortError(this));
256-
});
254+
this.abortHandler = this.abortHandler.bind(this);
255+
this.options.signal?.addEventListener('abort', this.abortHandler, {once: true});
257256

258257
// Important! If you replace `body` in a handler with another stream, make sure it's readable first.
259258
// The below is run only once.
@@ -545,6 +544,10 @@ export default class Request extends Duplex implements RequestEvents<Request> {
545544
return this;
546545
}
547546

547+
private abortHandler(): void {
548+
this.destroy(new AbortError(this));
549+
}
550+
548551
private async _finalizeBody(): Promise<void> {
549552
const {options} = this;
550553
const {headers} = options;
@@ -664,6 +667,7 @@ export default class Request extends Duplex implements RequestEvents<Request> {
664667
response.once('end', () => {
665668
this._responseSize = this._downloadedSize;
666669
this.emit('downloadProgress', this.downloadProgress);
670+
this.removeListener('abort', this.abortHandler);
667671
});
668672

669673
response.once('error', (error: Error) => {
@@ -674,6 +678,7 @@ export default class Request extends Duplex implements RequestEvents<Request> {
674678
response.destroy();
675679

676680
this._beforeError(new ReadError(error, this));
681+
this.removeListener('abort', this.abortHandler);
677682
});
678683

679684
response.once('aborted', () => {
@@ -684,6 +689,7 @@ export default class Request extends Duplex implements RequestEvents<Request> {
684689
message: 'The server aborted pending request',
685690
code: 'ECONNRESET',
686691
}, this));
692+
this.removeListener('abort', this.abortHandler);
687693
});
688694

689695
this.emit('downloadProgress', this.downloadProgress);

0 commit comments

Comments
 (0)