ES6 Iterator、Generator

2019-07-15  本文已影响0人  行走的蛋白质


Iterator

Iterator 概念
Iterator 作用
Iterator 遍历过程
简单实现 Array 的 Iterator 接口调用
let arr = ['a', 'b', 'c']
let iteratorFun = function(arr) {
    let nextIndex = 0
    return {
        next: function() {
            return nextIndex < arr.length ? {
                value: arr[nextIndex++],
                done: false
            } : {
                value: undefined,
                done: true
            }
        }
    }
}
let it = iteratorFun(arr)
console.log(it.next()) // {value: "a", done: false}
console.log(it.next()) // {value: "b", done: false}
console.log(it.next()) // {value: "c", done: false}
console.log(it.next()) // {value: undefined, done: true}
默认 Iterator 接口
let arr = ['a', 'b', 'c']
let it = arr[Symbol.iterator]()
console.log(it.next()) // {value: "a", done: false}
console.log(it.next()) // {value: "b", done: false}
console.log(it.next()) // {value: "c", done: false}
console.log(it.next()) // {value: undefined, done: true}

Generator

Generator 概念、作用
Generator 执行流程
function *fun1(x) {
    let y = 2 * (yield(x + 1))
    let z = yield(y / 3)
    return x + y + z
}
let doit = fun1(5)
console.log(doit.next()) // {value: 6, done: false}
console.log(doit.next(12)) // {value: 8, done: false}
console.log(doit.next(13)) // {value: 42, done: true}
Generator 用法实例
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

<script>

    function ajax(url) { // 创建 ajax 请求流程
        axios.get(url).then(res => userGen.next(res.data));
    }
    
    function* steps() { // 创建生成器函数
        console.log('ajax start users')
        const users = yield ajax('https://api.github.com/users');
        console.log(users, 'ajax start firstUser')
        const firstUser = yield ajax(`https://api.github.com/users/${users[0].login}`);
        console.log(firstUser, 'ajax start followers')
        const followers = yield ajax(firstUser.followers_url);
        console.log(followers, 'ajax end')
    }

    const userGen = steps(); 

    userGen.next(); // 流程开启

</script>
上一篇 下一篇

猜你喜欢

热点阅读