-
-
Notifications
You must be signed in to change notification settings - Fork 49
Description
Lines 74 to 77 in e7a7411
| req.on('timeout', () => { | |
| req.abort() | |
| cb(new Error('Request timed out')) | |
| }) |
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.
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: #64
But there's other DNS alternatives that don't require undici. Up to you, just figured I'd mention this here.