技术最前端,专注 Web 技术学习与总结。JavaScript, JS, ES6, TypeScript, Vue, PHP, CSS3, Html5, Node, Git, Markdown 等技术文章。
异步编程一直是 JS 的核心之一,业界也是一直在探索不同的解决方法,从「回调地狱」到发布订阅模式,再到 Promise
,都是在优化异步编程。尽管 Promise
已经很优秀了,也不会陷入「回调地狱」,但是嵌套层数多了也会有一连串的 then
,始终不能像同步代码那样直接往下写就行了。Generator
是 ES6 引入的进一步改善异步编程的方案,下面我们先来看看基本用法。
Yeoman 是一个脚手架生成工具,负责生成一个项目的基本解构,能够节省重复劳动,提升开发体验。
Yeoman 为我们提供了 Generator 的基类,于是:
const generators = require("yeoman-generator");
module.exports = generators.Base.extend({
constructor: function () {
generators.Base.apply(this, arguments)
// your logic
}
})
在 ES6 中定义一个生成器函数很简单,在 function 后跟上「*」即可:
function* foo1() { };
function *foo2() { };
function * foo3() { };
foo1.toString(); // "function* foo1() { }"
foo2.toString(); // "function* foo2() { }"
foo3.toString(); // "function* foo3() { }"
foo1.constructor; // function GeneratorFunction() { [native code] }
调用生成器函数会产生一个生成器(generator)。生成器拥有的最重要的方法是 next(),用来迭代:
function* foo() { };
var bar = foo();
bar.next(); // Object {value: undefined, done: true}