Skip to content

fix: fix headers and abort signals #41

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
May 5, 2020
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
fix: do not share abort signals between requests
chore: PR comments
achingbrain committed May 5, 2020
commit c12054e80c8a790fa134a4a5f596bbd9a73c4ea0
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -33,6 +33,7 @@
"license": "MIT",
"dependencies": {
"abort-controller": "^3.0.0",
"any-signal": "^1.1.0",
"buffer": "^5.4.2",
"err-code": "^2.0.0",
"fs-extra": "^9.0.0",
19 changes: 6 additions & 13 deletions src/http.js
Original file line number Diff line number Diff line change
@@ -6,6 +6,7 @@ const merge = require('merge-options').bind({ ignoreUndefined: true })
const { URL, URLSearchParams } = require('iso-url')
const TextDecoder = require('./text-encoder')
const AbortController = require('abort-controller')
const anySignal = require('any-signal')

const Request = fetch.Request
const Headers = fetch.Headers
@@ -96,18 +97,6 @@ class HTTP {
constructor (options = {}) {
/** @type {APIOptions} */
this.opts = merge(defaults, options)
this.opts.headers = options.headers

// connect internal abort to external
this.abortController = new AbortController()

if (this.opts.signal) {
this.opts.signal.addEventListener('abort', () => {
this.abortController.abort()
})
}

this.opts.signal = this.abortController.signal
}

/**
@@ -152,10 +141,14 @@ class HTTP {
opts.headers.set('content-type', 'application/json')
}

const abortController = new AbortController()
const signal = anySignal([abortController.signal, opts.signal])

const response = await timeout(fetch(url, {
...opts,
signal,
timeout: undefined
}), opts.timeout, this.abortController)
}), opts.timeout, abortController)

if (!response.ok && opts.throwHttpErrors) {
if (opts.handleError) {