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
lib: initial experimental AbortController implementation #33527
Conversation
7544a2d
to
29b247c
Compare
|
That's awesome, I'm going to check this out and play with it asap. Also post it on the summit issue. |
| 'use strict'; | ||
|
|
||
| // Modeled very closely on the AbortController implementation | ||
| // in https://github.com/mysticatea/abort-controller (MIT license) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
cc @mysticatea <3
|
Other than test and review this is there anything I can do to help? |
One of the next steps is to identify a list of the existing Promise APIs in core that could by updated to make use of this. Not all of them will make sense because not all of them are abortable (e.g. libuv only allows us to cancel file system requests if they have not already been started, for instance). So while we may be able to use Additionally, we should make it possible for custom const sleep = promisify(setTimeout);
const ac = new AbortController();
sleep(10000, ac);
ac.abort(); // Calls clearTimeout on abort |
|
@jasnell I've split those tasks off into an issue here: #33528 - please feel free to edit that issue as you see fit. I will start working on these one by one (on weekends mostly) and add tasks as I find them. Feel free to edit it. I want to be clear that I want to be helpful here so since you took the initiative if at any point any of the things I'm doing are frustrating just tell me and I'll stop and do whatever is helpful to the effort instead. These sorts of ongoing efforts tend to become frustrating in Node.js at times, I want to be sure that I'm not doing any toe-stepping if I can help it. |
|
Initial implementation of |
02953f1
to
7290192
Compare
|
Updated based on the #33556 |
|
@benjamingr ... quick note... this is currently extending from |
a7b3dd8
to
890a585
Compare
|
Marking this ready for review. This does create a new global so technically may be semver-major but I have tested it with existing ecosystem polyfills and haven't seen any breakage at all. Unless there are objections from the @nodejs/tsc, I'd like to handle this as a semver-minor. It is still experimental and an experimental warning will be emitted the first time an |
Why not? We do not perform the same sort of branding checks the DOM does. We just check that it has a property called "aborted" on it at the moment. I cannot speak about the other way around though - I would assume node's AbortSignals won't work in DOM APIs.
I am not sure who maintains the node type definitions - but if the API is different please open an issue and we will fix it. A goal is that developers should have an easier time cancelling things in a universal way and API deltas run counter to that.
This sounds like a reasonable approach to me. |
AbortController impl based very closely on: https://github.com/mysticatea/abort-controller Marked experimental. Not currently used by any of the existing promise apis. Signed-off-by: James M Snell <jasnell@gmail.com> PR-URL: nodejs#33527 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net>
AbortController impl based very closely on: https://github.com/mysticatea/abort-controller Marked experimental. Not currently used by any of the existing promise apis. Signed-off-by: James M Snell <jasnell@gmail.com> PR-URL: nodejs#33527 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net>
AbortController impl based very closely on: https://github.com/mysticatea/abort-controller Marked experimental. Not currently used by any of the existing promise apis. Signed-off-by: James M Snell <jasnell@gmail.com> PR-URL: nodejs#33527 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net>
AbortController impl based very closely on: https://github.com/mysticatea/abort-controller Marked experimental. Not currently used by any of the existing promise apis. Signed-off-by: James M Snell <jasnell@gmail.com> PR-URL: #33527 Backport-PR-URL: #38386 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net>


AbortController impl based very closely on:
https://github.com/mysticatea/abort-controller
Marked experimental.
Global (writable, configurable)
Not currently used by any of the existing promise apis.
AbortSignalextends fromEventEmitterinstead ofEventTarget.Checklist
make -j4 test(UNIX), orvcbuild test(Windows) passes