<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">https://medium.com/@bluepnume/even-with-async-await-you-probably-still-need-promises-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.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>