i can give you a specific solution to one of my async init problems
(done entirely in vanilla es5 code).  in this use-case, i want to run
integrated tests, but have to wait for the server to listen on a port,
and the db to be seeded first.  to keep complexity at a manageable
level, i find its worth the tradeoff to pollute the global namespace
with initialization functions and counters, especially if you intend
to break up the below example into separate modules.

```js
global.initializationCounter = 0;

global.initializationCounterDecrement = function () {
/*
 * this function will decrement the initialization counter,
 * and if the initialization counter reaches zero, then run the post-init code
 */
    global.initializationCounter -= 1;
    if (global.initializationCounter === 0) {
        global.postInit();
    }
};

global.postInit = function () {
/*
 * run your custom post-init code here
 */
    // run test-runner after initialization
    global.testRun();
};

...

var db, http, server;
http = require('http');

// pre-init1 - create http server,
// and wait for server to listen to port 8080, before running post-init code
server = http.createServer(function (request, response) {
    // request handler
    ...
});
global.initializationCounter += 1;
server.listen(8080, global.initializationCounterDecrement);

// pre-init2 - create db,
// and wait for db to seed, before running post-init code
db = ...;
global.initializationCounter += 1;
db.insert(<data1>, global.initializationCounterDecrement);
global.initializationCounter += 1;
db.insert(<data2>, global.initializationCounterDecrement);

// pre-init3 - any extra async init code
global.initializationCounter += 1;
setTimeout(function () {
    // you custom code
    ...
    global.initializationCounter();
});
```

On 8/18/17, Matthew Robb <matthewwr...@gmail.com> wrote:
> Yeah essentially although I'd think of it more as sugar for:
>
> (async () => { await null; ... })()
>
> On Aug 17, 2017 4:17 PM, "Tab Atkins Jr." <jackalm...@gmail.com> wrote:
>
>> On Thu, Aug 17, 2017 at 12:12 PM, Matthew Robb <matthewwr...@gmail.com>
>> wrote:
>> > Honestly have there been any proposals for something like `do async {
>> > //
>> can
>> > await here  }` which would produce a promise in the enclosing scope
>>
>> Do-expressions haven't advanced in general yet, but if/when they do,
>> this seems like it might be reasonable. It's just sugar for the
>> `Promise.resolve().then(()=>{...})` expression, right?
>>
>> ~TJ
>>
>
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to