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 <[email protected]> wrote:

On Sunday, December 20, 2015, <[email protected]> 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 <
[email protected]
<javascript:_e(%7B%7D,'cvml','[email protected]');>> 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 <[email protected]
<javascript:_e(%7B%7D,'cvml','[email protected]');>> 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é <[email protected]
<javascript:_e(%7B%7D,'cvml','[email protected]');>> 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, <[email protected]
<javascript:_e(%7B%7D,'cvml','[email protected]');>> 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 <
[email protected]
<javascript:_e(%7B%7D,'cvml','[email protected]');>> wrote:



On Saturday, December 19, 2015, Šime Vidas <[email protected]
<javascript:_e(%7B%7D,'cvml','[email protected]');>> 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
[email protected]
<javascript:_e(%7B%7D,'cvml','[email protected]');>
https://mail.mozilla.org/listinfo/es-discuss

_______________________________________________
es-discuss mailing list
[email protected]
<javascript:_e(%7B%7D,'cvml','[email protected]');>
https://mail.mozilla.org/listinfo/es-discuss



_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to