@babel/plugin-proposal-async-do-expressions
async do { .. }式は、ブロック(複数のステートメントを含む)を*非同期*コンテキストで実行し、ブロック内の最終的なステートメントの完了値が*非同期*コードの完了値になります。
例
並列でのHTTPリクエスト発行
JavaScript
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);
})
は変換されて
JavaScript
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);
})
インストール
- npm
- Yarn
- pnpm
npm install --save-dev @babel/plugin-proposal-async-do-expressions
yarn add --dev @babel/plugin-proposal-async-do-expressions
pnpm add --save-dev @babel/plugin-proposal-async-do-expressions
使用方法
設定ファイルを使用する場合(推奨)
babel.config.json
{
  "plugins": ["@babel/plugin-proposal-async-do-expressions"]
}
注記: このプラグインはasync do {}をES2017非同期アロー関数async () => {}に変換します。Node.js 6やIE 11など、古いエンジンをターゲットにする場合は、@babel/plugin-transform-async-to-generatorも追加してください。
babel.config.json
{
  "plugins": [
    "@babel/plugin-proposal-async-do-expressions",
    "@babel/plugin-transform-async-to-generator"
  ]
}
CLI経由
シェル
babel --plugins @babel/plugin-proposal-async-do-expressions script.js
Node API経由
JavaScript
require("@babel/core").transformSync("code", {
  plugins: ["@babel/plugin-proposal-async-do-expressions"],
});