Le 11/11/2012 14:44, Kevin Smith a écrit :
Is the following a counter-example?
On Fri, Nov 9, 2012 at 8:33 AM, Mark S. Miller <[email protected]
<mailto:[email protected]>> wrote:
Hi David, thanks for your thoughtful post. I've always used
the two-arg form of .then[1], but your post makes a strong
case for more often using separate one-arg .then and .fail
calls. I say only "more often" because the two arg form can
easily make distinctions that the one-arg forms cannot
var p2 = Q(p1).then(val => { throw foo(val); },
reason => { return bar(reason); });
is different than either of the one-arg chainings.
I don't think so. Consider the general two-arg form:
promise.then(onSuccess, onFail);
We can transform that into a one-arg form like so:
function WrappedError(err) {
this.error = err;
}
promise
.fail(err => new WrappedError(err))
.then(val => val instanceof WrappedError ? onFail(val.error) :
onSuccess(val));
But this involves the creation of an extra (unnecessary) node in the
graph.
I agree. But I feel it's possible for engines to optimize (both in time
and memory) by detecting the .then(func).fail() (or the other way
around) pattern.
Also, assuming async programming is related to DB query/disk
access/network I think these costs are negligible when compared with the
time to wait for network or a user input or a timeout.
And it's obtuse. I still think the two-arg form makes the most sense
as a base-level "then" API.
If the second argument is optional, it's possible to have both one-arg
and two-arg styles in the same API.
What do people think about this idea?
David
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss