JavaScript知识 - Generator
JavaScript资料整理
Generator 实现
Generator
是 ES6
中新增的语法,和 Promise
一样,都可以用来异步编程
function* test() { let a = 1 + 2; yield 2; yield 3; } let b = test(); console.log(b.next()); console.log(b.next()); console.log(b.next());
|
从以上代码可以发现,加上 *
的函数执行后拥有了 next
函数,也就是说函数执行后返回了一个对象。每次调用 next
函数可以继续执行被暂停的代码。以下是 Generator
函数的简单实现
function generator(cb) { return (function() { var object = { next: 0, stop: function() {} };
return { next: function() { var ret = cb(object); if (ret === undefined) return { value: undefined, done: true }; return { value: ret, done: false }; } }; })(); }
function test() { var a; return generator(function(_context) { while (1) { switch ((_context.prev = _context.next)) { case 0: a = 1 + 2; _context.next = 4; return 2; case 4: _context.next = 6; return 3; case 6: case "end": return _context.stop(); } } }); }
|