Babel
  • Docs
  • Setup
  • Try it out
  • Videos
  • Blog
  • Donate
  • Team
  • GitHub

›TC39 Proposals

Extensions

  • React Plugin
  • Flow Plugin
  • Typescript Plugin

Modules

  • AMD
  • Common JS
  • SystemJS
  • UMD

TC39 Proposals

  • async-do-expressions
  • class-properties
  • class-static-block
  • decorators
  • do-expressions
  • export-default-from
  • function-bind
  • function-sent
  • partial-application
  • pipeline-operator
  • private-methods
  • private-property-in-object
  • record-and-tuple
  • throw-expressions
  • syntax-top-level-await

@babel/preset-env

    ES2021

    • logical-assignment-operators
    • numeric-separator

    ES2020

    • export-namespace-from
    • nullish-coalescing-operator
    • optional-chaining
    • syntax-bigint
    • syntax-dynamic-import
    • syntax-import-meta

    ES2019

    • optional-catch-binding
    • json-strings

    ES2018

    • async-generator-functions
    • object-rest-spread
    • unicode-property-regex
    • dotall-regex
    • named-capturing-groups-regex

    ES2017

    • async-to-generator

    ES2016

    • exponentiation-operator

    ES2015

    • arrow-functions
    • block-scoping
    • classes
    • computed-properties
    • destructuring
    • duplicate-keys
    • for-of
    • function-name
    • instanceof
    • literals
    • new-target
    • object-super
    • parameters
    • shorthand-properties
    • spread
    • sticky-regex
    • template-literals
    • typeof-symbol
    • unicode-escapes
    • unicode-regex

    ES5

    • property-mutators

    ES3

    • member-expression-literals
    • property-literals
    • reserved-words
Edit

@babel/plugin-proposal-async-do-expressions

The async do { .. } expression executes a block (with one or many statements in it) in an asynchronous context, and the final statement completion value inside the block becomes the completion value of the asynchronous code.

Example

Issuing HTTP request in parallel

Promise.all([
  async do {
    const result = await fetch('https://example.com/A');
    await result.json()
  },
  async do {
    const result = await fetch('https://example.org/B');
    await result.json()
  },
]).then(([a, b]) => {
  console.log("example.com/A", a);
  console.log("example.org/B", b);
})

will be transformed to

Promise.all([
  (async () {
    const result = await fetch('https://example.com/A');
    return await result.json()
  })(),
  (async () {
    const result = await fetch('https://example.org/B');
    return await result.json()
  })(),
]).then(([a, b]) => {
  console.log("example.com/A", a);
  console.log("example.org/B", b);
})

Installation

npm install --save-dev @babel/plugin-proposal-async-do-expressions

Usage

With a configuration file (Recommended)

{
  "plugins": ["@babel/plugin-proposal-async-do-expressions"]
}

Note: This plugin transpiles async do {} to ES2017 Async arrow function async () => {}. If you target to an older engine, i.e. Node.js 6 or IE 11, please also add @babel/plugin-transform-async-to-generator:

{
  "plugins": [
    "@babel/plugin-proposal-async-do-expressions",
    "@babel/plugin-transform-async-to-generator"
  ]
}

Via CLI

babel --plugins @babel/plugin-proposal-async-do-expressions script.js

Via Node API

require("@babel/core").transformSync("code", {
  plugins: ["@babel/plugin-proposal-async-do-expressions"],
});

References

  • Proposal
← UMDclass-properties →
  • Example
  • Installation
  • Usage
    • With a configuration file (Recommended)
    • Via CLI
    • Via Node API
  • References
Babel
Docs
Learn ES2015
Community
VideosUser ShowcaseStack OverflowSlack ChannelTwitter
More
BlogGitHub OrgGitHub RepoWebsite RepoOld 6.x SiteOld 5.x Site