Reserving `await` within modules?

Domenic Denicola domenic at domenicdenicola.com
Thu Mar 27 13:39:15 PDT 2014


I could swear someone brought this up before, but all I found was a thread about reserving `await` within arrow functions...

One of my great hopes for the ES7 `await`/`async` proposal would be that you could provide a top-level grammar wherein `await` was usable, without being inside of an `async` function. For example, this would allow Node.js scripts to be written without having to wrap in an IIAAFE:

```js
const files = await Promise.all([fs.readFile("file.txt"), fs.readFile("file2.txt")];
console.log(files);
```

instead of

```js
(async () => {
    const files = await Promise.all([fs.readFile("file.txt"), fs.readFile("file2.txt")];
    console.log(files);
}());
```

I would imagine future versions of Node (or an evolution of it) would readily embrace such a top-level grammar in favor of the current one.

Then I realized, we are already introducing a new top-level grammar in ES6, viz. module, which is clearly the path forward.

Could we reserve `await` inside the module grammar, so as to make it possible for future modules to await promises at top-level, without an IIAAFE? This would likely mean even web environments, with their very stringent backward-compatibility constraints, would be able to use this top-level `await`.


More information about the es-discuss mailing list