W3C home > Mailing lists > Public > public-script-coord@w3.org > April to June 2013

Re: Futures

From: Juan Ignacio Dopazo <dopazo.juan@gmail.com>
Date: Fri, 26 Apr 2013 15:44:29 -0300
Message-ID: <CA+ejddWNBkqk5re0by9xSTRg7YT1s+YvptuNKxWEDbkYHtp37Q@mail.gmail.com>
To: "Tab Atkins Jr." <jackalmage@gmail.com>
Cc: Kevin Smith <zenparsing@gmail.com>, Brendan Eich <brendan@mozilla.com>, "Mark S. Miller" <erights@google.com>, Douglas Crockford <douglas@crockford.com>, "public-script-coord@w3.org" <public-script-coord@w3.org>, Norbert Lindenberg <w3@norbertlindenberg.com>, Markus Lanthaler <markus.lanthaler@gmx.net>, EcmaScript <es-discuss@mozilla.org>
2013/4/26 Tab Atkins Jr. <jackalmage@gmail.com>

> On Fri, Apr 26, 2013 at 11:25 AM, Kevin Smith <zenparsing@gmail.com>
> wrote:
> > Actually, I may have gotten it terribly wrong (apologies).  In my
> prototype
> > implementation, the following:
> >
> >     Future.accept(Future.resolve(1)).then(value => {
> >
> >         console.log(value !== 1);
> >         return Future.accept(Future.resolve(1));
> >
> >     }).then(value => {
> >
> >         console.log(value === 1);
> >     });
> >
> > logs
> >
> > - true
> > - true
> >
> > Is that what it should be doing, according to the DOM spec?  Anne, Alex?
>
> No, it should be "true", then "false".
>
> I think Kevin's assertion is correct. According to the spec, callbacks are
wrapped in something called a "future wrapper callback". When a promise is
returned from the callback, the wrapper does this:

Let value be the result of invoking callback with argument as argument.
> (...) run resolver's *resolve *with value and the synchronous flag set.


*resolve* tries to adopt the promise by being recursive, effectively
flattening the promise:

>
>    - If value is a JavaScript Object, set then to the result of calling
>    the JavaScript [[Get]] internal method of value with property name then.
>    - If JavaScript IsCallable(then) is true *[treats all thenables the
>    same way]*, run these substeps and then terminate these steps:
>    - Call the JavaScript [[Call]] internal method of then with this value
>    value and *resolve *and *reject *as arguments.
>
> If resolved called the thenable's then() with *accept *and reject, it
would only unwrap one layer.

Juan
Received on Friday, 26 April 2013 18:45:20 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 6 January 2015 21:37:49 UTC