如果我们查看用于构建该项目的gulpfile,我们可以看到源是通过babel 传输的。
gulp.task('build', ['clean'], function() {
return gulp
.src('src/**/*.js')
.pipe(sourcemaps.init())
.pipe(babel({
experimental: true,
loose: 'all',
optional: [
'bluebirdCoroutines',
'runtime'
]
}))
});
Babel 是一个转译器,可让您编写 ES6+ 代码并将其转译回 ES5。
Babel 会将您的 ES6+ 代码转换为 ES5 友好代码,因此您可以立即开始使用它而无需等待浏览器支持。
如果我们查看 Babel 网站上的文档,我们可以看到在 experimental section 的 ES7 部分中,有一个 asyncFunctions 的实现。
这些关键字是 ES7 规范的一部分,但尚未稳定。因此它们被包含在 Babel 的实验特性中。
简而言之,async 函数将允许您进行 await 一个返回 promise 的调用。
async function() {
// flow will be suspended here until
// the promise returned by someFunction is resolved
await someFunction()
}
ES6 将包括所谓的生成器,它们做类似的事情,但不特定于 Promise。你可能会开始看到 yield 关键字,或者像 function* () {} 这样声明的函数。它们就是所谓的生成器函数。
PouchDB 有一个特别的 good article 解释了这些功能的真实用例。