<div dir="ltr">I don't think I like "await ||" as a syntax, because it doesn't have anything to do with the "OR" operator.<div><br></div><div>It does avoid adding a bunch of potentially optimization-breaking if statements to the transpiled output for synchronous code like in my example, though, because you only get the behavior for the promises you actually choose to collect with it.</div><div><br></div><div>Manuel, I am not sure I understand your examples. You are consuming the values x1 and x2 in p4 right in the middle of the same async block that contains the "await ||" statements that produce them. They are not guaranteed to resolve until after that block is over, no?</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Nov 25, 2019 at 12:05 PM 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 class="gmail_default" style="font-family:arial,helvetica,sans-serif;color:rgb(0,0,0)">yet smaller, as Promise.resolve() was totally redundant here...</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 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 async {} = asynchronous scope (it groups parallel awaits => `await||`)</span></div><div><span style="color:rgb(0,128,0)">// NOTE p? = function call that returns a promise (? = just and index)</span></div><br><div><span style="color:rgb(0,16,128)">async</span> {</div><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>()</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)">x3</span> = <span style="color:rgb(175,0,219)">await</span> || <span style="color:rgb(121,94,38)">p3</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)">let</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)">x6</span></div><br><div>    <span style="color:rgb(0,16,128)">async</span> {</div><div>        <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,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>)</div><div>        <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><div>    }</div><br><div>    <span style="color:rgb(0,0,255)">let</span> <span style="color:rgb(0,16,128)">x7</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,16,128)">async</span> {</div><div>        <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,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><div>        <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>    }</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><div>}</div><br><div><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(121,94,38)">p3</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)">let</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)">x6</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>)])</div><div>                            .<span style="color:rgb(121,94,38)">then</span>(<span style="color:rgb(0,16,128)">results</span> <span style="color:rgb(0,0,255)">=></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)">results</span>)</div><div>                            .<span style="color:rgb(121,94,38)">then</span>(() <span style="color:rgb(0,0,255)">=></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><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(0,16,128)">x6</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,0,255)">=></span> {</div><div>                                <span style="color:rgb(0,0,255)">let</span> <span style="color:rgb(0,16,128)">x7</span>, <span style="color:rgb(0,16,128)">x8</span>, <span style="color:rgb(0,16,128)">x9</span></div><div>        </div><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)">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)">results</span> <span style="color:rgb(0,0,255)">=></span> [<span style="color:rgb(0,16,128)">x7</span>, <span style="color:rgb(0,16,128)">x9</span>] = <span style="color:rgb(0,16,128)">results</span>)</div><div>                                    .<span style="color:rgb(121,94,38)">then</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(0,16,128)">x8</span> = <span style="color:rgb(0,16,128)">_x8</span>)</div><div>                                    .<span style="color:rgb(121,94,38)">then</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><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Nov 25, 2019 at 5:57 PM manuelbarzi <<a href="mailto:manuelbarzi@gmail.com" target="_blank">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 class="gmail_default" style="font-family:arial,helvetica,sans-serif;color:rgb(0,0,0)">a few little corrections...</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 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 async {} = asynchronous scope (it groups parallel awaits => `await||`)</span></div><div><span style="color:rgb(0,128,0)">// NOTE p? = function call that returns a promise (? = just and index)</span></div><br><div><span style="color:rgb(0,16,128)">async</span> {</div><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>()</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)">x3</span> = <span style="color:rgb(175,0,219)">await</span> || <span style="color:rgb(121,94,38)">p3</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)">let</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)">x6</span></div><br><div>    <span style="color:rgb(0,16,128)">async</span> {</div><div>        <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,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>)</div><div>        <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><div>    }</div><br><div>    <span style="color:rgb(0,0,255)">let</span> <span style="color:rgb(0,16,128)">x7</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,16,128)">async</span> {</div><div>        <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,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><div>        <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>    }</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><div>}</div><br><div><span style="color:rgb(38,127,153)">Promise</span>.<span style="color:rgb(121,94,38)">resolve</span>()</div><div>    .<span style="color:rgb(121,94,38)">then</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)">p1</span>(), <span style="color:rgb(121,94,38)">p3</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)">let</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)">x6</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)">resolve</span>()</div><div>                            .<span style="color:rgb(121,94,38)">then</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)">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>)]))</div><div>                            .<span style="color:rgb(121,94,38)">then</span>(<span style="color:rgb(0,16,128)">results</span> <span style="color:rgb(0,0,255)">=></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)">results</span>)</div><div>                            .<span style="color:rgb(121,94,38)">then</span>(() <span style="color:rgb(0,0,255)">=></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><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(0,16,128)">x6</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,0,255)">=></span> {</div><div>                                <span style="color:rgb(0,0,255)">let</span> <span style="color:rgb(0,16,128)">x7</span>, <span style="color:rgb(0,16,128)">x8</span>, <span style="color:rgb(0,16,128)">x9</span></div><div>        </div><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)">resolve</span>()</div><div>                                    .<span style="color:rgb(121,94,38)">then</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)">results</span> <span style="color:rgb(0,0,255)">=></span> [<span style="color:rgb(0,16,128)">x7</span>, <span style="color:rgb(0,16,128)">x9</span>] = <span style="color:rgb(0,16,128)">results</span>)</div><div>                                    .<span style="color:rgb(121,94,38)">then</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(0,16,128)">x8</span> = <span style="color:rgb(0,16,128)">_x8</span>)</div><div>                                    .<span style="color:rgb(121,94,38)">then</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><br><br><br></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Nov 25, 2019 at 5:41 PM manuelbarzi <<a href="mailto:manuelbarzi@gmail.com" target="_blank">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 dir="ltr"><div class="gmail_quote"><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>Hi Manuel! Would you mind explaining the added value of your proposal? I am only seeing it being more verbose, but I've not found any added functionality or benefit from it</div></div></blockquote><div><br></div><div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;color:rgb(0,0,0)">the proposal combines <span style="font-family:Arial,Helvetica,sans-serif;color:rgb(34,34,34)">parallel and series </span>async / await and could resolve complex trees, like the following example:</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 async {} = asynchronous scope (it groups parallel awaits => `await||`)</span></div><div><span style="color:rgb(0,128,0)">// NOTE p? = function call that returns a promise (? = just and index)</span></div><br><div><span style="color:rgb(0,16,128)">async</span> { </div><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>()</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)">x3</span> = <span style="color:rgb(175,0,219)">await</span>|| <span style="color:rgb(121,94,38)">p3</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><div>    </div><div>    <span style="color:rgb(0,0,255)">let</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)">x6</span></div><div>    </div><div>    <span style="color:rgb(0,16,128)">async</span> {</div><div>        <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,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>)</div><div>        <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><div>    }</div><br><div>    <span style="color:rgb(0,0,255)">let</span> <span style="color:rgb(0,16,128)">x7</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,16,128)">async</span> {</div><div>        <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,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><div>        <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>    }</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><div>}</div><div style="font-family:Menlo,Monaco,"Courier New",monospace;font-size:12px;line-height:18px;white-space:pre-wrap"><br></div><div style="font-family:Menlo,Monaco,"Courier New",monospace;font-size:12px;line-height:18px;white-space:pre-wrap">// it would resolve a tree of parallel and series like following with traditional promises</div><br><div><span style="color:rgb(38,127,153)">Promise</span>.<span style="color:rgb(121,94,38)">resolve</span>()</div><div>    .<span style="color:rgb(121,94,38)">then</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(0,16,128)">p1</span>, <span style="color:rgb(0,16,128)">p3</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)">let</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)">x6</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)">resolve</span>()</div><div>                            .<span style="color:rgb(121,94,38)">then</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)">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>)]))</div><div>                            .<span style="color:rgb(121,94,38)">then</span>(<span style="color:rgb(0,16,128)">results</span> <span style="color:rgb(0,0,255)">=></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)">results</span>)</div><div>                            .<span style="color:rgb(121,94,38)">then</span>(() <span style="color:rgb(0,0,255)">=></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><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> {</div><div>                                <span style="color:rgb(0,0,255)">let</span> <span style="color:rgb(0,16,128)">x7</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(175,0,219)">return</span> <span style="color:rgb(38,127,153)">Promise</span>.<span style="color:rgb(121,94,38)">resolve</span>()</div><div>                                    .<span style="color:rgb(121,94,38)">then</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)">results</span> <span style="color:rgb(0,0,255)">=></span> [<span style="color:rgb(0,16,128)">x7</span>, <span style="color:rgb(0,16,128)">x9</span>] = <span style="color:rgb(0,16,128)">results</span>)</div><div>                                    .<span style="color:rgb(121,94,38)">then</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(0,16,128)">x8</span> = <span style="color:rgb(0,16,128)">_x8</span>)</div><div>                                    .<span style="color:rgb(121,94,38)">then</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 class="gmail_default" style="font-family:arial,helvetica,sans-serif;color:rgb(0,0,0)">```</div><br></div><div style="font-family:arial,helvetica,sans-serif;color:rgb(0,0,0)"><br></div></div></div>
</div></div></div>
</blockquote></div>
</blockquote></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><img src="https://docs.google.com/uc?export=download&id=1PuwzIzzd6LKIzLPd1vjM5IwpuaVFI9uK&revid=0ByBugVya1x6fTHRaM0NsZURPQktzVG41aFZMUEwzZWwvMHJnPQ" width="95" height="96"><br></div><div dir="ltr"><span style="color:rgb(0,0,0);font-family:Verdana;font-size:10.6667px;white-space:pre-wrap;background-color:transparent;font-weight:700;vertical-align:baseline"><span style="font-size:8pt">
THOMAS BOUTELL | CHIEF TECHNOLOGY OFFICER</span></span><span style="color:rgb(0,0,0);font-family:Verdana;font-size:8pt;white-space:pre-wrap;background-color:transparent;vertical-align:baseline"><br></span><span style="color:rgb(0,0,0);font-family:Verdana;font-size:8pt;white-space:pre-wrap;background-color:transparent;vertical-align:baseline">APOSTROPHECMS | </span><span style="color:rgb(17,85,204);font-family:Verdana;font-size:8pt;white-space:pre-wrap;background-color:transparent;vertical-align:baseline"><font color="#000000"><a href="http://apostrophecms.com/" style="color:rgb(17,85,204);font-family:Verdana;font-size:10.6667px;white-space:pre-wrap" target="_blank">apostrophecms.com</a> | he/him/his
</font></span></div></div></div></div></div>