メインコンテンツへスキップ

@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 install --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"],
});

参考文献