In a nutshell

Async Functions is a proposal1,2 for ECMAScript3.

It is currently at stage four4 and therefore it’s supposed to be part of ECMAScript20175.

The proposal improves the way developers could write asyncronous code.

One minute demo

As simple example consider the following code snippet that makes use of the native browser fetch api, and star wars api.

async function foo() {
  const response = await fetch('https://swapi.co/api/people/1/');
  const parsedResponse = await response.json();
  return parsedResponse.name;
}

foo()
  .then(name => console.log(':~', name));

Async functions always return a promise.
async/await are a much nicer way to express the waiting for a promise to be settled.

Browser support

Most browsers have already implemented the proposal.

Can I Use async-functions? Data on support for the async-functions feature across the major browsers from caniuse.com.

Also node.js has support enabled by default since version 7.6. Checkout kangax compat table for more info.

Dig deeper

Async functions are just syntactic sugar on top of other features already existing in JavaScript (namely Promise, and Function Generators).

It’s quite important to understand how these work, in order to unleash the power of async functions.

The following is our roadmap6 to real understanding of async functions.


  1. Spec Github repository. 

  2. Spec HTML Version. 

  3. ECMAScript is the official name of the JavaScript specification. 

  4. Stages are a way to define the stability level that a proposal has reached. Guidelines which determines requisite to enter in a specific stage are provided in the process document, however the TC39 committee must approve acceptance for each stage. 

  5. ECMAScript2017 features set. 

  6. Following bullet points might still not point to any link at the moment you’re reading. This means that the content is still in phase of being written/reviewed.