- From: Tab Atkins Jr. <jackalmage@gmail.com>
- Date: Thu, 2 May 2013 14:42:31 -0700
- To: "Sam L'ecuyer" <sam@cateches.is>
- Cc: Domenic Denicola <domenic@domenicdenicola.com>, "public-script-coord@w3.org" <public-script-coord@w3.org>
On Thu, May 2, 2013 at 2:32 PM, Sam L'ecuyer <sam@cateches.is> wrote:
>> What I'm hoping for is an explanation of why assimilating thenables is
>> necessary in the .then() callbacks, and why my concerns about
>> predictability (such as returning an object which has a .then()
>> method, but is not a promise-like, which "assimilates" with
>> non-sensical behavior and possibly causes errors) are either unfounded
>> or less important than the benefits of auto-assimilation.
>
> I think auto-assimilation is more accurately "auto-assuming".
> The issue you're trying to overcome is that we attempt to unwrap the return value from a callback if it seems promise-like.
>
> doStuff().then(function(x) {
> return 5;
> }).then(function(y) {
> //y is 5
> });
>
> doStuff().then(function(x) {
> return Future.accept(5);
> }).then(function(y) {
> //y is 5
> });
>
> doStuff().then(function(x) {
> return {then: function(){ return "uh-oh"}};
> }).then(function(y) {
> // the unwrap assuredly failed
> });
>
>
> What you want is:
>
> doStuff().then(function(x) {
> return Future.assimilate({then: function(){ return "uh-oh"}});
> }).then(function(y) {
> // y is {then: function(){ return "uh-oh"}}
> });
>
> Correct me if any of that's wrong. Seems reasonable to me.
Almost. The reason the third example failed is because it's a
"thenable" but not a "promise-like" - it's a false positive for the
"should I treat this like a promise?" test.
Your fourth example is an inversion of what I'm trying to say. I want
promises to work such that:
1. A "thenable" is just treated as a plain value when returned by a
.then() callback.
2. You use Future.assimilate() or whatever to transform a
"promise-like" into a promise.
~TJ
Received on Thursday, 2 May 2013 21:43:18 UTC