Legitimate uses of IIFEs?

Mat At Bread bread at mailed.me.uk
Sun Dec 20 21:57:45 UTC 2015


I don't dispute you can do it, I just don't see it as necessary, or at 
least any more necessary than using an IIFE to collect together synchronous 
logic. The creation of the scope is not a factor here.


On 20 December 2015 9:54:59 pm Dmitry Soshnikov 
<dmitry.soshnikov at gmail.com> wrote:

> On Sunday, December 20, 2015, <bread at mailed.me.uk> wrote:
>
>> You're quite right, which demonstrates the lack of necessity for a
>> top-level await (FYI, I find the inconsistency irritating but
>> understandable), so I still maintain this is not a _required_ use for an
>> IIAFE - there is no reason to create an async function to invoke another
>> async function; one can simply invoke it, and if the result/completion is
>> required, use it's ,then() member....but there's no need/advantage to
>> wrapping such an invocation in an IIAFE, right?
>>
>>
> The use case is valid, there was no mistakes. We use async IIFEs as an
> "entry point" to async code: you can await there, do intermediate
> calculations with temporary variables, again awai, etc (Promise.all has a
> different use case).
>
> Dmitry
>
>
>
>>
>> On 20 December 2015 13:40:30 -00:00, Forbes Lindesay <
>> forbes at lindesay.co.uk
>> <javascript:_e(%7B%7D,'cvml','forbes at lindesay.co.uk');>> wrote:
>>
>> Promises are eager.  That is, they do the work and resolve whether you
>> await them or not.  If you want to handle exceptions, you need to call
>> .then and provide an error handler, but other than that it's totally ok to
>> not bother waiting for a promise.
>>
>> On 19 Dec 2015, at 22:02, Mat At Bread <bread at mailed.me.uk
>> <javascript:_e(%7B%7D,'cvml','bread at mailed.me.uk');>> wrote:
>>
>> Which is what I said, I hope. Use the .then for top-level invitation.
>> Dimitry's example wouldn't resolve the Promise
>>
>> On 19 December 2015 9:24:04 pm Fabrício Matté <ultcombo at gmail.com
>> <javascript:_e(%7B%7D,'cvml','ultcombo at gmail.com');>> wrote:
>>
>> @bread I see you are referencing Dmitry's sample, but why do you say it
>> won't work? AFAIK async functions return promises, so you don't necessarily
>> need a top-level `await`. I believe this (extremely ugly) sample should
>> work:
>>
>> ```js
>> function f(cb) {
>>   (async function() {
>>     // await here
>>   })().then(v => cb(null, v), cb);
>> }
>> ```
>>
>> /fm
>>
>> On Sat, Dec 19, 2015 at 7:11 PM, <bread at mailed.me.uk
>> <javascript:_e(%7B%7D,'cvml','bread at mailed.me.uk');>> wrote:
>>
>> That’s not going to work. The correct form still requires an (illegal)
>> top-level await:
>>
>> await (async function() {
>> // await here
>> })();
>>
>> The easiest way to spawn a top-level async function is:
>>
>> here.then(function(result){},function(error){}) ;
>>
>> On 19 December 2015 20:14:44 -00:00, Dmitry Soshnikov <
>> dmitry.soshnikov at gmail.com
>> <javascript:_e(%7B%7D,'cvml','dmitry.soshnikov at gmail.com');>> wrote:
>>
>>
>>
>> On Saturday, December 19, 2015, Šime Vidas <sime.vidas at gmail.com
>> <javascript:_e(%7B%7D,'cvml','sime.vidas at gmail.com');>> wrote:
>>
>> 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?
>> I’ve checked my code and found instances of this pattern:
>>
>> var foo = (function () {
>>     var a, b, c; // helper variables
>>     // some computation
>>     return /* final value of foo */;
>> }());
>> Btw, there is a "do expression" proposal (stage 0) [1] for this type of
>> pattern.
>> Anything else?
>>
>>
>> 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)
>>
>> (async function() {
>>   // await here
>> })();
>>
>> Dmitry
>>
>>
>>
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss at mozilla.org
>> <javascript:_e(%7B%7D,'cvml','es-discuss at mozilla.org');>
>> https://mail.mozilla.org/listinfo/es-discuss
>>
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss at mozilla.org
>> <javascript:_e(%7B%7D,'cvml','es-discuss at mozilla.org');>
>> https://mail.mozilla.org/listinfo/es-discuss
>>
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20151220/400ab92a/attachment.html>


More information about the es-discuss mailing list