This calls abort on the request, and fires the callback. So you'd expect simpleGet to have relinquished all execution back to the caller.
But in a super simple example of simply making a request to some URL, and exiting (nothing more), there is an observed 30s delay between when the callback is called with the error and before the process exits.
I looked into it, and it appears this is caused by the fact that the http module from node defaults to dns.lookup which is not cancellable.
I experimented with swapping this out with Tangerine which maintains an internal AbortController and adding a tangerine.cancel() on any error and it worked flawlessly.
https://github.com/feross/simple-get/blob/e7a74115ca9dd28720f186275c5a67df81985426/index.js#L74-L77
This calls
abort
on the request, and fires the callback. So you'd expectsimpleGet
to have relinquished all execution back to the caller.But in a super simple example of simply making a request to some URL, and exiting (nothing more), there is an observed 30s delay between when the callback is called with the error and before the process exits.
I looked into it, and it appears this is caused by the fact that the
http
module from node defaults todns.lookup
which is not cancellable.I experimented with swapping this out with
Tangerine
which maintains an internalAbortController
and adding atangerine.cancel()
on any error and it worked flawlessly.Slight hiccup though - tangerine's peer dependency is
undici
so it might be unfortunate to pull that in if you're not using it. Ref: https://github.com/feross/simple-get/issues/64But there's other DNS alternatives that don't require undici. Up to you, just figured I'd mention this here.