I had a similar example in real-world code, but it was just to merge
sync and async into the same code path. I handled it by using
generators and basically running them myself:
https://github.com/isiahmeadows/mithril-node-render/blob/v2/index.js#L195-L206

In either case, I'm not sure it's worth adding new syntax for it.

-----

Isiah Meadows
[email protected]
www.isiahmeadows.com

On Wed, Oct 9, 2019 at 3:08 AM Andrea Giammarchi
<[email protected]> wrote:
>
> I don't know why this went in a completely unrelated direction so ... I'll 
> try to explain again what is `await?` about.
>
> My first two examples show a relevant performance difference between the 
> async code and the sync one.
>
> The async code though, has zero reasons to be async and so much slower.
>
> ```js
> (async () => {
>   console.time('await');
>   const result = await (async () => [await 1, await 2, await 3])();
>   console.timeEnd('await');
>   return result;
> })();
> ```
>
> Why would `await 1` ever need to create a micro task, if already executed 
> into a scheduled one via async?
>
> Or in general, why any callback that would early return a value that is not a 
> promise should create a micro task?
>
> So the proposal was implemented in an attempt to de-sugar `await?` into the 
> steps proposed by the dev I've interacted with:
>
> ```js
> const value = await? callback();
>
> // as sugar for
> let value = callback();
> if ('then' in value)
>   value = await value;
> ```
>
> The order is guaranteed and linear in every case, so that nothing actually 
> change logically speaking, and the hint would be about performance, 'cause 
> engines don't apparently optimize non-promise based cases.
>
> However, since the initial intent/proposal about performance got translated 
> into everything else, I've instantly lost interest myself as it's evident an 
> `await?` would causes more confusion than it solves.
>
> I am also not answering other points as not relevant for this idea/proposal.
>
> Thanks regardless for sharing your thoughts, it helped me see it would 
> confuse developers.
>
> Best Regards
>
>
>
>
>
> On Tue, Oct 8, 2019 at 11:58 PM Dan Peddle <[email protected]> wrote:
>>
>> Have to agree, mixing sync and async code like this looks like a disaster 
>> waiting to happen. Knowing which order your code will be executed in might 
>> seem not so important for controlled environments where micro optimisations 
>> are attractive, but thinking about trying to track down a bug through this 
>> would drive me nuts.
>>
>> Imagine you have a cached value which can be retrieved synchronously - other 
>> code which runs in order, and perhaps not directly part of this chain, would 
>> be fine. When it’s not there, zalgo would indeed be released. The solution 
>> to this is to use promises (as I’m sure you know) so you have a consistent 
>> way of saying when something is ready... otherwise it’s thenable sniffing 
>> all the way through the codebase.
>>
>> Async infers some kind of IO or deferred process, scheduling. If there’s a 
>> dependency, then we need to express that. That it may be in some cases 
>> available synchronously seems like something to be extremely wary of.
>>
>> > On 8. Oct 2019, at 22:25, Tab Atkins Jr. <[email protected]> wrote:
>> >
>> > I'm not sure I understand the intended use-case here.  If the author
>> > knows the function they're calling is async, they can use `await`
>> > normally. If they know it's not async, they can avoid `await`
>> > altogether. If they have no idea whether it's async or not, that means
>> > they just don't understand what the function is returning, which
>> > sounds like a really bad thing that they should fix?  And in that
>> > case, as Gus says, `await?`'s semantics would do some confusing things
>> > to execution order, making the line after the `await?` either run
>> > *before* or *after* the calling code, depending on whether the await'd
>> > value was a promise or not.
>> >
>> > ~TJ
>> > _______________________________________________
>> > es-discuss mailing list
>> > [email protected]
>> > https://mail.mozilla.org/listinfo/es-discuss
>
> _______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to