Re: Deprecating Future's .then()

On Tue, Jun 4, 2013 at 8:55 AM, Sam Tobin-Hochstadt <samth@ccs.neu.edu> wrote:
> Thinking about this more, I'm now unsure why both `fulfill` and
> `resolve` are needed given the semantics of `.chain()` and `.then()`
> described below.
>
> In particular, if `.then()` chains recursively *before* calling the
> callback, then there's no difference between:
>
>     Future.resolve(x).then(v => ...)
>
> and
>
>     Future.fulfill(x).then(v => ...)
>
> even when `x` is a promise.  The only way to observe this is with `.chain()`.
>
> Thoughts?

I'm just going to try to repeat what you said here to make sure I understand.

Promise.resolve(val) creates a promise of val, regardless of whether
val is a promise, has a callable then property, or anything like that.
(In that sense it is equivalent to Future.accept() today.)

promise.then() keeps unwrapping promise's internal value until it no
longer has a callable then property at which point it invokes the
relevant callback passed to promise.then(). (Exact algorithm TBD after
broader agreement.)

promise.chain() invokes its relevant callback with promise's internal value.

promise.then() and promise.chain() return value (newPromise) is
resolved with the return value of their callbacks after it has been
unwrapped once.

If that's it that works for me. My main problem with this renaming has
been fulfill, which is way hard to spell (at least if you're not a
native), but that has conveniently disappeared.


--
http://annevankesteren.nl/

Received on Tuesday, 4 June 2013 13:49:04 UTC