了解了生成器函数的基本用法过后,下面案例是一个简单的应用场景。就是去实现一个发号器,在实际业务开发过程当中经常需要用到自增的 ID ,而且每次调用这个 ID 都需要在原有的基础上去加一。这里如果我们使用生成器函数来去实现这个功能是最合适的了,
function * createIDMaker () {
let id = 1;
while (true) {
yield id++
}
}
const idMaker = createIDMaker()
console.log(idMaker.next().value) // 1
console.log(idMaker.next().value) // 2
我们还可以使用生成器函数来去实现对象的 iterator 方法,因为生成器它也实现了 iterator 的接口而且使用生成器函数去实现 iterator 方法会比之前方式要简单的多。
const todos = {
life: ['吃饭', '睡觉', '打豆豆'],
learn: ['语文', '数学', '外语'],
work: ['喝茶'],
[Symbol.iterator]:function * () {
const all = [...this.life, ...this.learn, ...this.work];
for (item of all) {
yeild item
}
}
}
生成器最重要的作用还是,解决异步编程当中回调嵌套过深所导致的问题。