<div dir="ltr">If we have `await.all`, what about `await.race`, `await.allSettled`, `await.any`?</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Nov 19, 2019 at 7:45 PM Jacob Bloom <<a href="mailto:mr.jacob.bloom@gmail.com">mr.jacob.bloom@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">To simplify the problem of working with promises in parallel, I<br>
propose this new syntax:<br>
<br>
```javascript<br>
async function initialize() {<br>
  let foo, bar, baz;<br>
  await.all {<br>
    foo = (await request('foo.json')).data;<br>
    bar = (await request('bar.json')).data;<br>
    baz = (await request('baz.json')).data;<br>
  }<br>
  render(foo, bar, baz);<br>
}<br>
```<br>
<br>
Each child statement of the curly braces is evaluated in parallel and<br>
execution resumes when they've all resolved.<br>
<br>
**The Problem:** with current syntax, the above function would<br>
probably look something like this:<br>
<br>
```javascript<br>
async function initialize() {<br>
  const [<br>
    { data: foo }, // renaming response.data => foo<br>
    { data: bar },<br>
    { data: baz },<br>
  ] = await Promise.all([<br>
    request('foo.json'),<br>
    request('bar.json'),<br>
    request('baz.json'),<br>
  ]);<br>
  render(foo, bar, baz);<br>
}<br>
```<br>
<br>
For this kind of use case, `Promise.all` leads to "parallel lists" of<br>
promises and their return values, which must be kept in sync. Using<br>
those values either requires (sometimes deep) destructuring or<br>
temporary variables.<br>
<br>
This structure is also just fundamentally different from working<br>
serially in async/await and it forces you to reason about the problem<br>
in a specific way. This doesn't appear to be a conscious decision to<br>
force good code practices, it's just a limitation that falls naturally<br>
out of the current syntax. Thus, we have an opportunity to shift some<br>
of the burden back to the language with this new syntax.<br>
<br>
Here's the full proposal:<br>
<a href="https://github.com/mrjacobbloom/proposal-await-all" rel="noreferrer" target="_blank">https://github.com/mrjacobbloom/proposal-await-all</a> -- let me know what<br>
you think!<br>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div>