<div>That’s not going to work. The correct form still requires an (illegal) top-level await:
<br /></div><div><br /></div><div>await (async function() {
<br /></div><div>// await here
<br /></div><div>})();
<br /></div><div><br /></div><div>The easiest way to spawn a top-level async function is:
<br /></div><div><br /></div><div>here.then(function(result){},function(error){}) ;<br /></div><div><br /></div><div>On 19 December 2015 20:14:44 -00:00, Dmitry Soshnikov <dmitry.soshnikov@gmail.com> wrote:<br /></div><blockquote type="cite"><div class="oneComWebmail-html oneComWebmail-mail"><div class="oneComWebmail-body"><div><br /></div><div><br /></div><div>On Saturday, December 19, 2015, Šime Vidas <<a href="mailto:sime.vidas@gmail.com" target="_blank">sime.vidas@gmail.com</a>> wrote:<br /></div><blockquote class="oneComWebmail-gmail_quote" style="margin: 0 0 0 .8ex; border-left: 1px #ccc solid; padding-left: 1ex;"><div dir="ltr"><div><div><div>With block statements + let/const, IIFEs are no longer needed to emulate block-scoped variables. That got me thinking, are there other uses of IIFEs, or are they no longer needed?<br /></div></div><div>I’ve checked my code and found instances of this pattern:<br /></div><div><br /></div><div>var foo = (function () {<br /></div></div><div>    var a, b, c; // helper variables<br /></div><div>    // some computation<br /></div><div>    return /* final value of foo */;<br /></div><div><div>}());<br /></div></div><div><div>Btw, there is a "do expression" proposal (stage 0) [1] for this type of pattern.<br /></div></div><div>Anything else?<br /></div></div></blockquote><div><br /></div><div>FWIW, one of the still valid use cases is async IIFE, to spawn an async code (since there's no yet top-level async/await)<br /></div><div><br /></div><div>(async function() {<br /></div><div>  // await here<br /></div><div>})();<br /></div><div><br /></div><div>Dmitry <span></span> <br /></div></div></div></blockquote><div><br /></div>