<div dir="ltr">OK I'm even more confused now. x1 is surely not a resolved value until all the next "non parallel await" so is it "undefined" until then?<div><br></div><div>Could you give an example of what you mean by the `await.all { ... }` block syntax bringing "<span style="color:rgb(0,0,0);font-family:arial,helvetica,sans-serif">complexity on returning values assignment, specially when" "about constants (`const`)", as I'm unclear what you are referring to.</span></div><div><span style="color:rgb(0,0,0);font-family:arial,helvetica,sans-serif"><br></span></div><div><span style="color:rgb(0,0,0);font-family:arial,helvetica,sans-serif">Cheers,</span></div><div><span style="color:rgb(0,0,0);font-family:arial,helvetica,sans-serif">N</span></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, 26 Nov 2019 at 13:35, manuelbarzi <<a href="mailto:manuelbarzi@gmail.com">manuelbarzi@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div class="gmail_quote"><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Why not just maximally preserve current JavaScript for parallel execution, just by omitting `await` in multiple async calls, simply wrapping it in an `await.all` block to ensure completion before code continues past the block. This surely is the more straightforward way to satisfy the same goals?</div></div></blockquote><div><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;color:rgb(0,0,0)">because wrapping it an `await.all` on the one hand explicitly groups promises, but brings complexity on returning values assignment, specially when is about constants (`const`). so, if you avoid blocks, just marking parallel awaits with, for example, a suffix `await||`, or whatever other more convenient way, you can just write the code in series as normally, and avoid that complexity. the transpiler would just require to group the consecutive marked parallel awaits (`await||`) into a Promise.all() and that's it. following i reproduce the demo before:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;color:rgb(0,0,0)">```</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;color:rgb(0,0,0)"><div style="font-family:Menlo,Monaco,"Courier New",monospace;font-size:12px;line-height:18px;white-space:pre-wrap"><div><span style="color:rgb(0,128,0)">// NOTE p? = function call that returns a promise (? = just and index)</span></div><div><span style="color:rgb(0,128,0)">// NOTE s? = function call that runs synchronously and returns a value (? = just and index)</span></div><br><div><span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x0</span> = <span style="color:rgb(175,0,219)">await</span> <span style="color:rgb(121,94,38)">p0</span>()</div><br><div><span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x11</span> = <span style="color:rgb(121,94,38)">s11</span>() <span style="color:rgb(0,128,0)">// sync code in-the-middle</span></div><br><div><span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x1</span> = <span style="color:rgb(175,0,219)">await</span> || <span style="color:rgb(121,94,38)">p1</span>(<span style="color:rgb(0,16,128)">x0</span>)</div><div><span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x3</span> = <span style="color:rgb(175,0,219)">await</span> || <span style="color:rgb(121,94,38)">p3</span>(<span style="color:rgb(0,16,128)">x11</span>)</div><div><span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x2</span> = <span style="color:rgb(175,0,219)">await</span> <span style="color:rgb(121,94,38)">p2</span>(<span style="color:rgb(0,16,128)">x1</span>)</div><div><span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x10</span> = <span style="color:rgb(175,0,219)">await</span> <span style="color:rgb(121,94,38)">p10</span>(<span style="color:rgb(0,16,128)">x2</span>, <span style="color:rgb(0,16,128)">x3</span>)</div><br><div><span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x12</span> = <span style="color:rgb(121,94,38)">s12</span>() <span style="color:rgb(0,128,0)">// sync code in-the-middle</span></div><br><div><span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x4</span> = <span style="color:rgb(175,0,219)">await</span> || <span style="color:rgb(121,94,38)">p4</span>(<span style="color:rgb(0,16,128)">x1</span>, <span style="color:rgb(0,16,128)">x2</span>)</div><div><span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x5</span> = <span style="color:rgb(175,0,219)">await</span> || <span style="color:rgb(121,94,38)">p5</span>(<span style="color:rgb(0,16,128)">x2</span>, <span style="color:rgb(0,16,128)">x3</span>, <span style="color:rgb(0,16,128)">x12</span>)</div><div><span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x6</span> = <span style="color:rgb(175,0,219)">await</span> <span style="color:rgb(121,94,38)">p6</span>(<span style="color:rgb(0,16,128)">x4</span>, <span style="color:rgb(0,16,128)">x5</span>, <span style="color:rgb(0,16,128)">x10</span>)</div><br><div><span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x7</span> = <span style="color:rgb(175,0,219)">await</span> || <span style="color:rgb(121,94,38)">p7</span>(<span style="color:rgb(0,16,128)">x4</span>, <span style="color:rgb(0,16,128)">x6</span>)</div><div><span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x9</span> = <span style="color:rgb(175,0,219)">await</span> || <span style="color:rgb(121,94,38)">p9</span>(<span style="color:rgb(0,16,128)">x5</span>, <span style="color:rgb(0,16,128)">x6</span>)</div><div><span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x8</span> = <span style="color:rgb(175,0,219)">await</span> <span style="color:rgb(121,94,38)">p8</span>(<span style="color:rgb(0,16,128)">x6</span>, <span style="color:rgb(0,16,128)">x7</span>)</div><br><div><span style="color:rgb(175,0,219)">await</span> <span style="color:rgb(121,94,38)">p11</span>(<span style="color:rgb(0,16,128)">x8</span>, <span style="color:rgb(0,16,128)">x9</span>)</div><br><div><span style="color:rgb(0,128,0)">// it would resolve a tree of parallel and series like following with traditional promises</span></div><br><div><span style="color:rgb(0,16,128)">p0</span></div><div>    .<span style="color:rgb(121,94,38)">then</span>(<span style="color:rgb(0,16,128)">x0</span> <span style="color:rgb(0,0,255)">=></span> {</div><div>        <span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x11</span> = <span style="color:rgb(121,94,38)">f11</span>()</div><br><div>        <span style="color:rgb(175,0,219)">return</span> <span style="color:rgb(38,127,153)">Promise</span>.<span style="color:rgb(121,94,38)">all</span>([<span style="color:rgb(121,94,38)">p1</span>(<span style="color:rgb(0,16,128)">x0</span>), <span style="color:rgb(121,94,38)">p3</span>(<span style="color:rgb(0,16,128)">x11</span>)])</div><div>            .<span style="color:rgb(121,94,38)">then</span>((<span style="color:rgb(0,16,128)">x1</span>, <span style="color:rgb(0,16,128)">x3</span>) <span style="color:rgb(0,0,255)">=></span></div><div>                <span style="color:rgb(121,94,38)">p2</span>(<span style="color:rgb(0,16,128)">x1</span>)</div><div>                    .<span style="color:rgb(121,94,38)">then</span>(<span style="color:rgb(0,16,128)">x2</span> <span style="color:rgb(0,0,255)">=></span></div><div>                        <span style="color:rgb(121,94,38)">p10</span>(<span style="color:rgb(0,16,128)">x2</span>, <span style="color:rgb(0,16,128)">x3</span>)</div><div>                            .<span style="color:rgb(121,94,38)">then</span>(<span style="color:rgb(0,16,128)">x10</span> <span style="color:rgb(0,0,255)">=></span> {</div><div>                                <span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x12</span> = <span style="color:rgb(121,94,38)">s12</span>()</div><br><div>                                <span style="color:rgb(175,0,219)">return</span> <span style="color:rgb(38,127,153)">Promise</span>.<span style="color:rgb(121,94,38)">all</span>([<span style="color:rgb(121,94,38)">p4</span>(<span style="color:rgb(0,16,128)">x1</span>, <span style="color:rgb(0,16,128)">x2</span>), <span style="color:rgb(121,94,38)">p5</span>(<span style="color:rgb(0,16,128)">x2</span>, <span style="color:rgb(0,16,128)">x3</span>, <span style="color:rgb(0,16,128)">x12</span>)])</div><div>                                    .<span style="color:rgb(121,94,38)">then</span>((<span style="color:rgb(0,16,128)">x4</span>, <span style="color:rgb(0,16,128)">x5</span>) <span style="color:rgb(0,0,255)">=></span></div><div>                                        <span style="color:rgb(121,94,38)">p6</span>(<span style="color:rgb(0,16,128)">x4</span>, <span style="color:rgb(0,16,128)">x5</span>, <span style="color:rgb(0,16,128)">x10</span>)</div><div>                                            .<span style="color:rgb(121,94,38)">then</span>(<span style="color:rgb(0,16,128)">x6</span> <span style="color:rgb(0,0,255)">=></span> <span style="color:rgb(38,127,153)">Promise</span>.<span style="color:rgb(121,94,38)">all</span>([<span style="color:rgb(121,94,38)">p7</span>(<span style="color:rgb(0,16,128)">x4</span>, <span style="color:rgb(0,16,128)">x6</span>), <span style="color:rgb(121,94,38)">p9</span>(<span style="color:rgb(0,16,128)">x5</span>, <span style="color:rgb(0,16,128)">x6</span>)])</div><div>                                                .<span style="color:rgb(121,94,38)">then</span>((<span style="color:rgb(0,16,128)">x7</span>, <span style="color:rgb(0,16,128)">x9</span>) <span style="color:rgb(0,0,255)">=></span> <span style="color:rgb(121,94,38)">p8</span>(<span style="color:rgb(0,16,128)">x6</span>, <span style="color:rgb(0,16,128)">x7</span>)</div><div>                                                    .<span style="color:rgb(121,94,38)">then</span>(<span style="color:rgb(0,16,128)">x8</span> <span style="color:rgb(0,0,255)">=></span> <span style="color:rgb(121,94,38)">p11</span>(<span style="color:rgb(0,16,128)">x8</span>, <span style="color:rgb(0,16,128)">x9</span>))</div><div>                                                )</div><div>                                            )</div><div>                                    )</div><div>                            })</div><div>                    )</div><div>            )</div><div>    })</div><div>```</div></div></div></div></div></div></div>
</blockquote></div>