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

@babel/plugin-transform-async-to-generator

情報

このプラグインは、ES2017の`@babel/preset-env`に含まれています。

Babel 7では、`transform-async-to-module-method`がこのプラグインに統合されました。

入力

JavaScript
async function foo() {
await bar();
}

出力

JavaScript
var _asyncToGenerator = function (fn) {
...
};
var foo = _asyncToGenerator(function* () {
yield bar();
});

オプション付き出力

非同期関数をBluebirdコルーチンに変換する(注意点

JavaScript
var Bluebird = require("bluebird");

var foo = Bluebird.coroutine(function*() {
yield bar();
});

インストール

npm install --save-dev @babel/plugin-transform-async-to-generator

使用方法

オプションなし

babel.config.json
{
"plugins": ["@babel/plugin-transform-async-to-generator"]
}

オプション付き

babel.config.json
{
"plugins": [
[
"@babel/plugin-transform-async-to-generator",
{
"module": "bluebird",
"method": "coroutine"
}
]
]
}

CLI経由

シェル
babel --plugins @babel/plugin-transform-async-to-generator script.js

Node API経由

JavaScript
require("@babel/core").transformSync("code", {
plugins: ["@babel/plugin-transform-async-to-generator"],
});

注意点

Bluebird非Promiseランタイムエラー

非Promise値で`await`を使用する場合、Bluebirdは「Error: A value was yielded that could not be treated as a promise」というエラーをスローします。Babelはこのランタイムエラーを自動的に処理できないため、手動でPromiseに変換する必要があります。

async function foo() {
- await 42;
+ await Promise.resolve(42);
}

参照