Fork me on GitHub

让我们认真对待 ES6 的 generator 函数。

自从 Node.js v0.11.2 支持 generator 函数yield 关键字以来,已经过去几个月了。这个消息受到 极大的 关注,因为 generator 语法为编写异步服务器端代码提供了一个更简洁的选择,以替代回调。

在服务器端使用 JavaScript 的最大好处之一是,你(至少在理论上)可以在 Web 浏览器中运行相同的代码。但是,如果你选择在 Node.js 中使用 generator 函数,最终会得到一堆无法在客户端执行的代码。问题就在这里:对 generator 的原生支持之所以如此令人兴奋,是因为它使你能够编写非常简洁、强大但不可移植的代码。

我们在 Facebook 的 JavaScript 基础设施团队中的一些人,迫不及待地想要迎接未来的到来,因此我们开发了一个名为 regenerator 的工具,用高效的现代 JavaScript(简称 ECMAScript 5 或 ES5)替换 generator 函数,使其行为方式相同。由于该工具本身是用 ES5 实现的,因此你可以立即在此 Web 浏览器中尝试它,而无需离开此网页。

Regenerator 严重依赖 Esprima JavaScript 解析器以及我们维护的两个用于操作抽象语法树的库,ast-typesrecast。它在精神上类似于 Google 的 Traceur Compiler,后者通过源代码转换支持 generator 和许多其他 ES6 功能,但我们认为它在几个方面优于 Traceur

请尝试下面的转换器,并随时报告错误。Regenerator 已经经过了充分的测试,并且功能完整,但我们很乐意您能帮助使其完全万无一失!

输入: 报告一个错误

输出: control-return 以 运行

来自 Facebook 的开源项目。 © 2013 Facebook Inc.