Tab Atkins Jr. jackalmage at gmail.com
Fri Apr 26 11:32:49 PDT 2013

On Fri, Apr 26, 2013 at 11:25 AM, Kevin Smith <zenparsing at 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".

Future.resolve(1) returns a Future<1>.

Future.accept(Future.resolve(1)) returns Future<Future<1>>.

If you call .then() on a Future<Future<1>>, the callback receives a
Future<1> as its argument.

If you return a Future<Future<1>> from the callback, the chained
future adopts its state, which means that the chained future is now
also a Future<Future<1>>.

So, calling .then() on the chained future will give you the same
result - the callback receives a Future<1> as its argument.

(Using a mixture of Future.accept and Future.resolve in the way that
you have makes things more confusing than necessary.  When called on a
plain value, the two functions are identical.  They only act
differently when you call them on a future.)


More information about the es-discuss mailing list