Skip to content
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

Optionally allow a promise to be cancellable #22

Open
scothis opened this issue Mar 9, 2012 · 3 comments
Open

Optionally allow a promise to be cancellable #22

scothis opened this issue Mar 9, 2012 · 3 comments

Comments

@scothis
Copy link
Member

scothis commented Mar 9, 2012

I would like the consumer of a promise to be able to cancel an operation. While the consumer of a promise should not be able to directly resolve or reject the deferred, it should be able to say that it no longer cares about the outcome.

@unscriptable
Copy link
Member

There have been several times I've thought "Hmmmm. what if I need to kill this object before the promise completes? How will the code in these resolve/reject callbacks behave? Will they throw exceptions? Do I want that to happen and potentially cause the promise to reject for other listeners too?"

If a promise consumer had the ability to say "I no longer want my callbacks called", that would let me write code that doesn't care about getting called after the objects in the current scope/context are destroyed. If when.js were able to release it's references to the callbacks, that would be even better since the garbage collector could free up the memory associated with those function calls.

@briancavalier
Copy link
Member

It sounds like there are two potentially separate issues here:

  1. Besides the existing ability to cancel a deferred, it'd be nice to be able to safely grant another party the ability to cancel that deferred--similar to the current way in which resolver can safely be given to another party to grant the ability to resolve or reject the promise. Whether that "cancelability" belongs on the promise is a related question ... as is how/whether that cancelability would transfer to chained promises.
  2. The ability to "unobserve" a promise after you've registered to observe via .then() or when(). To do this currently, you'd have to write special code in your promise handlers that bails out if they're called when you no longer care about the promise.

In other words, the two potentially useful, but different behaviors are: canceling the operation itself, and canceling your interest in the outcome of the operation.

If that sounds right, @unscriptable would you file a separate ticket for 2? If not, let me know what I got wrong, and we can try to clarify :)

@briancavalier
Copy link
Member

This is being tracked over in the Promises/A+ cancellation supplemental spec

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants