tld*_*ldr 56 javascript async-await babeljs ecmascript-next
有一个引入C#风格的建议async-await
.我知道Babel.js将ES6转换为ES5,但有没有办法让它变得异步 - 等待到ES5
?
Fel*_*ing 99
截至Babel v6,Babel不再包含任何变形金刚.您必须明确指定要转换的任何要素.
实现这一目标的最快方法是使用已包含转换ES2015和更新提案所需的插件集的预设.因为async
,您将需要es2015
和es2017
预设和runtime
插件(不要忘记babel-runtime
按照文档中的描述安装):
{
"presets": [
"es2015",
"es2017"
],
"plugins": [
"transform-runtime"
]
}
Run Code Online (Sandbox Code Playgroud)
如果您在支持ES2015的环境(更具体地说,生成器和Promises)中运行代码,那么您只需要es2017预设:
{
"presets": [
"es2017"
]
}
Run Code Online (Sandbox Code Playgroud)
要仅转换async
函数,您需要以下插件.
syntax-async-functions
在任何情况下都需要能够解析异步函数
要运行异步功能,您需要使用
transform-async-to-generator
:将async
函数转换为生成器.这将使用Babel自己的"共同例程"实现.transform-async-to-module-method
:还将async
函数转换为生成器,但将其传递给配置中指定的模块和方法,而不是Babel自己的方法.这允许您使用外部库,例如bluebird
.如果您的代码在支持生成器的环境中运行,那么就没有什么可做的了.然而,如果目标环境并不能支持发电机,你也将有改造发电机.这是通过transform-regenerator
变换完成的.此转换取决于运行时函数,因此您还需要Babel的transform-runtime
转换(+ babel-runtime
包).
异步到发电机
{
"plugins": [
"syntax-async-functions",
"transform-async-to-generator"
]
}
Run Code Online (Sandbox Code Playgroud)
异步到模块方法
{
"plugins": [
"syntax-async-functions",
["transform-async-to-module-method", {
"module": "bluebird",
"method": "coroutine"
}]
]
}
Run Code Online (Sandbox Code Playgroud)
异步到发电机+再生器
{
"plugins": [
"syntax-async-functions",
"transform-async-to-generator",
"transform-regenerator",
"transform-runtime"
]
}
Run Code Online (Sandbox Code Playgroud)
用法
Run Code Online (Sandbox Code Playgroud)$ babel --experimental
Run Code Online (Sandbox Code Playgroud)babel.transform("code", { experimental: true });
自(2月25日Felix Kling)以来,这个解决方案可能已经发生了变化,或者可能还有不止一种方法可以使用异步等待.
对我们有用的是像这样运行Babel
$ npm install babel-runtime
Run Code Online (Sandbox Code Playgroud)
$ babel inputES7.js -o outputES5.js --optional runtime
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
21376 次 |
最近记录: |