<div dir="auto">Note that you can also await the same promise multiple times, so you could do it like this:<div dir="auto"><br></div><div dir="auto"><span style="font-family:sans-serif;font-size:13.696px">async function makePizza(sauceType = 'red') {</span><br style="font-family:sans-serif;font-size:13.696px"><span style="font-family:sans-serif;font-size:13.696px">  </span><br style="font-family:sans-serif;font-size:13.696px"><span style="font-family:sans-serif;font-size:13.696px">  let dough  = makeDough();</span><br style="font-family:sans-serif;font-size:13.696px"><span style="font-family:sans-serif;font-size:13.696px">  let sauce  = makeSauce(sauceType);</span><br style="font-family:sans-serif;font-size:13.696px"><span style="font-family:sans-serif;font-size:13.696px">  let cheese = grateCheese((await sauce)</span><span style="font-family:sans-serif;font-size:13.696px">.</span><wbr style="font-family:sans-serif;font-size:13.696px"><span style="font-family:sans-serif;font-size:13.696px">determineCheese());</span></div><div dir="auto"><span style="font-family:sans-serif;font-size:13.696px">  </span><br style="font-family:sans-serif;font-size:13.696px"><span style="font-family:sans-serif;font-size:13.696px">  (await dough).add(await sauce);</span><br style="font-family:sans-serif;font-size:13.696px"><span style="font-family:sans-serif;font-size:13.696px">  (await dough).add(await cheese);</span><br style="font-family:sans-serif;font-size:13.696px"><span style="font-family:sans-serif;font-size:13.696px">  </span><br style="font-family:sans-serif;font-size:13.696px"><span style="font-family:sans-serif;font-size:13.696px">  return (await dough);</span><br style="font-family:sans-serif;font-size:13.696px"><span style="font-family:sans-serif;font-size:13.696px">}</span><br></div><div dir="auto"><span style="font-family:sans-serif;font-size:13.696px"><br></span></div><div dir="auto"><font face="sans-serif"><span style="font-size:13.696px">Now the variables will be awaited on first use </span></font></div><div dir="auto"><font face="sans-serif"><span style="font-size:13.696px"><br></span></font></div><div dir="auto"><font face="sans-serif"><span style="font-size:13.696px">Marius Gundersen </span></font></div></div><div class="gmail_extra"><br><div class="gmail_quote">On 24 Feb 2017 03:36, "Šime Vidas" <<a href="mailto:sime.vidas@gmail.com">sime.vidas@gmail.com</a>> wrote:<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><div><div>Daniel Brain from PayPal has written a post about async/await: <a href="https://medium.com/@bluepnume/even-with-async-await-you-probably-still-need-promises-9b259854c161" target="_blank">https://medium.com/@bluepnume/<wbr>even-with-async-await-you-<wbr>probably-still-need-promises-<wbr>9b259854c161</a><br><br></div>It revolves around writing an async function which would execute three tasks in parallel like so:<br><br>|--------- dough ---------><br>|---- sauce ----> |-- cheese --><br><br></div>The code used as a starting point was:<br><br>async function makePizza(sauceType = 'red') {<br>  <br>  let dough  = await makeDough();<br>  let sauce  = await makeSauce(sauceType);<br>  let cheese = await grateCheese(sauce.<wbr>determineCheese());<br>  <br>  dough.add(sauce);<br>  dough.add(cheese);<br>  <br>  return dough;<br>}<br><br></div>This pattern, of course, cases the tasks to execute in sequence, like so:<br><br>|-------- dough --------> |-------- sauce --------> |-- cheese --><br><br></div>The remainder of the post introduces several solutions in an attempt to achieve optimal concurrency. For instance, the author’s preferred solution uses a custom memoize function and Promise.all. <br><br></div>Compared to the initial code above, these solutions seem complex, almost as if the language does not have the appropriate syntactic forms and/or APIs to address this particular use case.<br><br>This got me thinking. What if there was a version of await that doesn’t pause execution on the spot, but continues execution until the variable which the await is assigned to, is first referenced? <br><br></div><div><div><div><div><div><div><div><div>I’ve added comments to mark the positions where execution pauses:<br></div><div><br>async function makePizza(sauceType = 'red') {<br>  <br>  let dough  = await makeDough();<br>  let sauce  = await makeSauce(sauceType);<br>  let cheese = await grateCheese(/* pause to await sauce */ sauce.determineCheese());<br>  <br>  /* pause to await dough */ dough.add(sauce);<br>  dough.add(/* pause to await cheese */ cheese);<br>  <br>  return dough;<br>}<br><br></div><div>Please let me know if adding a await-like keyword that works like this would be a bad idea. From a layman’s perspective, it seems that having this feature would simplify code patterns which involve execution in parallel like the example described in the article.<br></div></div></div></div></div></div></div></div></div>
<br>______________________________<wbr>_________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/<wbr>listinfo/es-discuss</a><br>
<br></blockquote></div><br></div>