生成器函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同
代码说明:
1) 的位置没有限制
2) 生成器函数返回的结果是*迭代器对象,调用迭代器对象的 next 方法可以得到yield 语句后的值
3) yield 相当于函数的暂停标记,也可以认为是函数的分隔符,每调用一次 next方法,执行一段代码
4) next 方法可以传递实参,作为 yield 语句的返回值


执行.next() 会返回 yield后面的语句或者变量或者直接量:
参数传递
第n个next的参数,作为生成器函数内,第n-1个yield的返回结果,如下图所示,第二个next传入BBB作为 gen内第一个yield的返回结果。
arg作为gen的参数,在第一次调用next的时候才会打印执行,以为它是第一个段的内容
实例
主要用于异步编程
原始写法,不断回调
有了生成器之后:
这个例子,演示了生成器的写法,但是或许有点问题,因为iterator的调用变得混乱,在多个函数中都有
实例二:
//模拟获取 用户数据 订单数据 商品数据function getUsers(){setTimeout(()=>{let data = '用户数据';//调用 next 方法, 并且将数据传入iterator.next(data);}, 1000);}function getOrders(){setTimeout(()=>{let data = '订单数据';iterator.next(data);}, 1000)}function getGoods(){setTimeout(()=>{let data = '商品数据';iterator.next(data);}, 1000)}function * gen(){let users = yield getUsers();let orders = yield getOrders();let goods = yield getGoods();}//调用生成器函数let iterator = gen();iterator.next();
