Cancelable promises proposal
Glen Huang
curvedmark at gmail.com
Tue Aug 4 00:15:42 UTC 2015
This is a good point. I didn't think about passing the same callback more than once.
Ideally, if the same resolve & reject callback combination is passed more than once, the same promise is always returned (I can't think of a use case where promises could stop to work, if promises were specced with this additional rule, but maybe I overlooked). So if we pretend that's the case, it seems ignore() should deregister all callbacks.
Do you have a use case where the same callback will be passed to the same promise more than once? Does deregistering all callbacks at once seem counter-intuitive in that case if you want to show disinterest?
Another way out is to make ignore() cancel then() in a LIFO manner, probably also provide a ignoreAll(), which also gives a hint that ignore() only ignore one callback combination a time. But this just seems ugly.
> On Aug 3, 2015, at 11:49 PM, Boris Zbarsky <bzbarsky at mit.edu> wrote:
>
> On 8/2/15 8:43 PM, Glen Huang wrote:
>> You can think it as that each promise keeps a list of its child promises, when the same callback is passed to .ignore() it sets a flag on the corresponding child promise so that when itself resolves/rejects, it won't pass that state to that child promise
>
> There seems to be a potential footgun here. Say I call then() twice with the same function. Now I have two child promises. If I now call ignore() with that function, which of the child promises is ignored? Both? Just one of them? Something else?
>
> This situation doesn't _quite_ arise with add/removeEventListener, because you can't addEventListener a given listener twice to the same event target. So a removeEventListener can see at most one matching listener.
>
> -Boris
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
More information about the es-discuss
mailing list