Ron Buckton wrote:
Perhaps Future should have a static Future.cancelable method (similar to 
Proxy.revocable):

Matching the two APIs seems like a win, all else equal.

let { future, cancel } = Future.cancelable(function(resolver) { .. do future 
stuff .. });

You would still need a means to hook cancellation, possibly by replacing cancel 
to the caller:

function getJSON() {
   var xhr = new XMLHttpRequest();
   ...
   let { future, cancel } = Future.cancelable(...);
   return { future, cancel: function() { cancel(); xhr.abort(); } };
}

The other advantage of the Proxy.revocable pattern, as Tom pointed out, is its OCap-ness; you can't use the returned revoke on some other revocable proxy. Same argument would apply to Future.cancelable.

/be

Ron

-----Original Message-----
From: es-discuss-boun...@mozilla.org [mailto:es-discuss-boun...@mozilla.org] On 
Behalf Of Brendan Eich
Sent: Tuesday, April 23, 2013 6:41 PM
To: Tab Atkins Jr.
Cc: es-discuss
Subject: Re: Futures

Tab Atkins Jr. wrote:
On Sat, Apr 20, 2013 at 6:17 AM, Brendan Eich<bren...@mozilla.com>   wrote:
Tab Atkins Jr. wrote:
It would be so nice if JS had multiple return values, so we could
let cancellable future-returning APIs just return a naked resolver
as their second value,
Hello, destructuring:

let{  proxy, revoke}  = Proxy.revocable(target, handler);


from
http://wiki.ecmascript.org/doku.php?id=strawman:revokable_proxies. Or use an 
array pattern if you prefer.

JIT'ing VMs can optimize these pretty easily to avoid object allocation.
Yeah, that's fine when you're explicitly invoking something that needs
to return two objects.

You didn't grok what I wrote. The object is erased, and the value(s) are 
returned to the caller depending on the pattern it uses.

It's less fine when you have something like a hypothetical getJSON()
(future-returning XHR sugar), which can reasonably just return a
future, but which we also want to make cancellable.  Burdening *every*
call site

No, you can use a smaller pattern, e.g.

let { future } = getJSON();

instead of

let { future, cancel } = getJSON();

   with the need to pull out the future from the returned object

No, see above.

   isn't great.

HTH.

/be
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss



_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to