stream: support abort signal

PR-URL: https://github.com/nodejs/node/pull/36061
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Robert Nagy <ronagy@icloud.com>
This commit is contained in:
Benjamin Gruenbaum 2020-11-09 23:25:30 +02:00 committed by Node.js GitHub Bot
parent 5122456883
commit 5bd1eecfa9
10 changed files with 183 additions and 13 deletions

View file

@ -51,7 +51,7 @@ const { Buffer } = require('buffer');
const { defaultTriggerAsyncIdScope } = require('internal/async_hooks');
const { URL, urlToOptions, searchParamsSymbol } = require('internal/url');
const { kOutHeaders, kNeedDrain } = require('internal/http');
const { AbortError, connResetException, codes } = require('internal/errors');
const { connResetException, codes } = require('internal/errors');
const {
ERR_HTTP_HEADERS_SENT,
ERR_INVALID_ARG_TYPE,
@ -61,7 +61,6 @@ const {
} = codes;
const {
validateInteger,
validateAbortSignal,
} = require('internal/validators');
const { getTimerDuration } = require('internal/timers');
const {
@ -69,6 +68,8 @@ const {
DTRACE_HTTP_CLIENT_RESPONSE
} = require('internal/dtrace');
const { addAbortSignal } = require('stream');
const INVALID_PATH_REGEX = /[^\u0021-\u00ff]/;
const kError = Symbol('kError');
@ -174,12 +175,7 @@ function ClientRequest(input, options, cb) {
const signal = options.signal;
if (signal) {
validateAbortSignal(signal, 'options.signal');
const listener = (e) => this.destroy(new AbortError());
signal.addEventListener('abort', listener);
this.once('close', () => {
signal.removeEventListener('abort', listener);
});
addAbortSignal(signal, this);
}
let method = options.method;
const methodIsString = (typeof method === 'string');