Reflection to know if executed within a generator/async ?

Jordan Harband ljharb at gmail.com
Thu Dec 3 22:20:42 UTC 2015


I think that migration path is typically 1) make the breaking change so
that everything returns a promise ASAP, 2) seamlessly migrate sync parts to
async at your leisure, without a breaking change.

On Thu, Dec 3, 2015 at 1:07 PM, Andrea Giammarchi <
andrea.giammarchi at gmail.com> wrote:

> Sorry I misread your code. Your case assumes fileGetContent always returns
> a Promise so my proposal won't be useful there because it's already used as
> Promise.
>
> My idea is more about migrating to full async code without changing all
> the things around, giving an API the ability to behave differently.
>
> Maybe it's too complicated or too magic to implement, that's OK anyway.
>
> On Thu, Dec 3, 2015 at 8:59 PM, Claude Pache <claude.pache at gmail.com>
> wrote:
>
>>
>> Le 3 déc. 2015 à 20:04, Andrea Giammarchi <andrea.giammarchi at gmail.com>
>> a écrit :
>>
>> I guess `held` would be like an arrow function, "transparent" when it
>> comes to held invokes (like context or arguments)
>>
>>
>> ? Sorry, but I don't understand how that would help to answer my
>> question.
>>
>> —Claude
>>
>>
>> On Thu, Dec 3, 2015 at 5:23 PM, Claude Pache <claude.pache at gmail.com>
>> wrote:
>>
>>> How would you detect that the following call to your `fileGetContent`
>>> function should return a Promise?
>>>
>>> ```js
>>> function oldSchool() {
>>>     return fileGetContent("foo").then(function (c) {
>>>         // ....
>>>     })
>>> }
>>> ```
>>>
>>> —Claude
>>>
>>>
>>> > Le 3 déc. 2015 à 13:15, Andrea Giammarchi <andrea.giammarchi at gmail.com>
>>> a écrit :
>>> >
>>> > Hi there,
>>> >   just writing down some thoughts about being able to understand if a
>>> method/function has been  executed within a generator/async and is being
>>> yielded/awaited.
>>> >
>>> > Rationale: API that would like to behave synchronously in some case,
>>> returning Promises in other cases.
>>> >
>>> > Example:
>>> >
>>> > ```js
>>> > function fileGetContent(fileName) {
>>> >   // random example
>>> >   if (held) {
>>> >     return fetch(fileName).then((r)=>r.text());
>>> >   } else {
>>> >     var xhr = new XMLHttpRequest;
>>> >     xhr.open('GET', fileName, false);
>>> >     xhr.send(null);
>>> >     return xhr.responseText;
>>> >   }
>>> > }
>>> > ```
>>> >
>>> > Above example will virtually return always the same type and it could
>>> work inside a generator or an  async function as long as it's being held.
>>> >
>>> > Does any of this make sense? Is it worth exploring this pattern?
>>> >
>>> > Thanks for any sort of thought.
>>> >
>>> > Best  Regards
>>> >
>>> >
>>> >
>>> >
>>> > _______________________________________________
>>> > es-discuss mailing list
>>> > es-discuss at mozilla.org
>>> > https://mail.mozilla.org/listinfo/es-discuss
>>>
>>>
>>
>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20151203/cd6bde91/attachment.html>


More information about the es-discuss mailing list