On Sat, Oct 12, 2019 at 7:19 AM Andrea Giammarchi
<[email protected]> wrote:
> in order to work, `await` must be executed in an async scope/context (either 
> top level or within a closure).
>
> In such case, either somebody is awaiting the result of that `async` 
> execution, or the order doesn't matter.

That's definitely not true. I gave you an explicit example where the
order differs. That example code is realistic if you're using the
async call for side-effects only (and thus don't care about the
returned promise), or if you're storing the returned promise in a
variable so you can pass it to one of the promise combinators later.
In either of these cases the order of execution between the sync and
async code can definitely matter.

> The following two examples produce indeed the very same result:
>
> ```js
> (async () => { return 1; })().then(console.log);
> console.log(2);
>
> (async () => { return await 1; })().then(console.log);
> console.log(2);
> ```

In both of these cases, you're doing no additional work after the
"maybe async" point. That is the exact part that moves in execution
order between the two cases, so obviously you won't see any
difference.  Here's a slightly altered version that shows off the
difference:

```js
(async () => { 1; console.log("async"); return 3; })().then(console.log);
console.log(2);

(async () => { await 1; console.log("async"); return 3; })().then(console.log);
console.log(2);
```

In the first you'll log "async", "2", "3". In the second you'll log
"2", "async", "3".

> As summary: the proposal was to help engines be faster when it's possible, 
> but devs are confused by the syntax, and maybeat the end there wouldn't be as 
> many benefits compared to the apparent confusion this proposal would add.

You still seem to be misunderstanding what the execution order
difference is about. Nobody's confused about the syntax; it's clear
enough. It just does bad, confusing things as you've presented it.

As I said in earlier message, there *is* a way to eliminate the
execution-order difference (making it so the only difference would be
the number of microtasks when your function awaits *multiple* sync
values), which I thought you'd come up with at some point, but I'm
pretty sure it was just me misunderstanding what you'd said.

~TJ
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to