Reflection to know if executed within a generator/async ?

Ron Buckton Ron.Buckton at microsoft.com
Thu Dec 3 17:48:48 UTC 2015


I agree with Bradley, and kindly refer you to this oft referenced blog post regarding synchronous and asynchronous APIs: http://blog.ometer.com/2011/07/24/callbacks-synchronous-and-asynchronous/

Ron





From: Bradley Meck
Sent: Thursday, December 3, 2015 8:57 AM
To: Andrea Giammarchi
Cc: es-discuss at mozilla.org
Subject: Re: Reflection to know if executed within a generator/async ?


I am against any semantics that expose how a function is used. I struggle and many others do when this occurs in CSS (display varies depending on container). I would also be hesitant to encourage things acting both synchronously and asynchronously depending on how they are used. Changing temporal behavior depending on usage is asking for race conditions.

On Thu, Dec 3, 2015 at 10:37 AM, Andrea Giammarchi <andrea.giammarchi at gmail.com<mailto:andrea.giammarchi at gmail.com>> wrote:
Uhm... you never closed that "will this value be .... thing and I'm expecting a "dary" answer like in few emails but my whole point is consuming  an API in different scenarios: held or synchronous.

You can always create an API that always returns a Promise, that's nothing new for the language, but can you decide if it's he case to absolutely return a promise 'cause any other value would cause trouble within that generator or async function?

On Thu, Dec 3, 2015 at 4:15 PM, John Lenz <concavelenz at gmail.com<mailto:concavelenz at gmail.com>> wrote:
I don't think being executed in a generator or async function is a good signal that a promise should be returned (something needs to "await" the promise).   The async function is really a chain of synchronous code split at various points, during the synchronous parts the code would still need to be synchronous and returning a promise would be wrong.   The real data you need is "will this value be consumed by an 'await' expression or be used to resolve a Promise and, in the general case,  that is not something that can't be answered at the time your example function is executing.

On Thu, Dec 3, 2015 at 4:15 AM, Andrea Giammarchi <andrea.giammarchi at gmail.com<mailto:andrea.giammarchi at gmail.com>> wrote:
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<mailto:es-discuss at mozilla.org>
https://mail.mozilla.org/listinfo/es-discuss<https://na01.safelinks.protection.outlook.com/?url=https%3a%2f%2fmail.mozilla.org%2flistinfo%2fes-discuss&data=01%7c01%7cron.buckton%40microsoft.com%7c884c0e07599b45dd22f108d2fc02d478%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=pYbuVGySrXg%2fl7oapX7JO3YVMIsZpEmbdykdXYgGKIs%3d>




_______________________________________________
es-discuss mailing list
es-discuss at mozilla.org<mailto:es-discuss at mozilla.org>
https://mail.mozilla.org/listinfo/es-discuss<https://na01.safelinks.protection.outlook.com/?url=https%3a%2f%2fmail.mozilla.org%2flistinfo%2fes-discuss&data=01%7c01%7cron.buckton%40microsoft.com%7c884c0e07599b45dd22f108d2fc02d478%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=pYbuVGySrXg%2fl7oapX7JO3YVMIsZpEmbdykdXYgGKIs%3d>


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20151203/c6c44ed1/attachment.html>


More information about the es-discuss mailing list