ECMAscript新特性 - 生成器应用 Generator

174 阅读1分钟

了解了生成器函数的基本用法过后,下面案例是一个简单的应用场景。就是去实现一个发号器,在实际业务开发过程当中经常需要用到自增的 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
        }
    }
}

生成器最重要的作用还是,解决异步编程当中回调嵌套过深所导致的问题。