The advent of async/await for Node.js - Node.js v7 has now arrived

Date: Fri Jun 16 2017 Node Web Development »»»» Node.JS »»»» Asynchronous Programming
nodejs-dark.pngWith today's first release of Node.js version 7, we now have async/await as a base feature of the platform. This is a significant milestone that wasn't even mentioned in the commit message. The async/await feature is so important that I'm preparing a short book to discuss JavaScript asynchronous programming patterns, that highly features async/await.

Click here for more Node.js programming advice


$ nvm install 7
Downloading https://nodejs.org/dist/v7.0.0/node-v7.0.0-darwin-x64.tar.xz...
######################################################################## 100.0%

That's how easy it is now to install Node.js version 7, if you have nvm installed. Implementing async/await is just a command line option away.


'use strict';

const fs    = require('fs-extra-promise');
const util  = require('util');

async function twofiles() {
    var texts = [
        await fs.readFileAsync('hello.txt', 'utf8'),
        await fs.readFileAsync('goodbye.txt', 'utf8')
    ];
    console.log(util.inspect(texts));
}

twofiles();

Try this code ... Run npm init to generate a package.json, and then:

npm install fs-extra-promise --save

Finally, put suitable text into hello.txt and goodbye.txt ...

Your first attempt at running this might result in this:


$ node  2files.js
/Users/david/ebooks/Callbacks-Promises-Async/examples/asyncawait/2files.js:6
async function twofiles() {
      ^^^^^^^^
SyntaxError: Unexpected token function
    at Object.exports.runInThisContext (vm.js:76:16)
    at Module._compile (module.js:545:28)
    at Object.Module._extensions..js (module.js:582:10)
    at Module.load (module.js:490:32)
    at tryModuleLoad (module.js:449:12)
    at Function.Module._load (module.js:441:3)
    at Module.runMain (module.js:607:10)
    at run (bootstrap_node.js:382:7)
    at startup (bootstrap_node.js:137:9)
    at bootstrap_node.js:497:3

That's because you're missing a flag. The async/await feature is behind a --harmony flag. Run this instead:


$ node --harmony-async-await 2files.js
[ 'Hello, world!\n', 'Goodbye, world!\n' ]

Have fun. Ponder the code above. It is so fetchingly simple, yet does asynchronous execution. This is our future. I'll shortly have an initial version of my book available.