Generator函数小记

generator函数是ES6的语法,最大的特点就是调用一下走一步,即调用一下走一个yield,具体如下:

function* gen() {
        yield '第一个'
        yield '第二个'
        return '结束'
    };
    let g = gen();
    console.log(g); //get {<suspended>}
    console.log(g.next()); //{value: '第一个', done: false}
    console.log(g.next()); //{value: '第二个', done: false}
    console.log(g.next()); //{value: '结束', done: true}

上面的就是一个 Generator函数,跟其他函数不同的就是他是调用一下执行一次,下面的yield会暂停执行,所以函数声明时要加*号,也是跟其他函数的区别;调用next()后返回一个对像,对象的属性value值就是yield后面的执行结果,done是一个布尔值,表示该函数里面的执行语句是否执行完毕。

因为它可以中断执行所以一般用它来执行封装异步操作;可以和外部输入的数据进行交换,也是决定它可以封装异步操作的原因;

next 方法返回值的 value 属性,是 Generator 函数向外抛出数据;next 方法还可以接受参数,这是向 Generator 函数体内输入数据。

 function* gen(a) {
        let b = yield a + 1
        return b
    };
    let g = gen(1)
    console.log(g.next()) //{value: 2, done: false}
    console.log(g.next(3))//{value: 3, done: true}

上面第一个next () 返回的value属性是 a + 1的值 (2);第二个next带有参数3,这个参数可以传入Generator函数,作为上个阶段返回的结果,被函数体的变量b接收,因为返回的是3(也就是b的值)

我们可以还可以用for...of...来循环遍历它,他会把next()返回对像的value值输出

function* gen() {
        yield '第一个'
        yield '第二个'
        return '结束'
    };
let g = gen();

for(let item of g){
        console.log(item)
    }
//第一个
//第二个


Generator函数的用法

封装异步数据请求

//以axios为例
//先引入axios
// <script src="https://unpkg.com/axios/dist/axios.min.js"></script>

 function* get(a) {
        let b = yield 'boo-bey'
        yield axios.get(`https://api.github.com/users/${b}`)
     
    };
    let g = get()
    let user= g.next().value //返回一个用户名,把用户名传进下一个next
    console.log(user)
    g.next(user).value.then(res=>{
        console.log(res)
    })

关于异步解决方案:

1)回调函数

2)事件监听

3)发布/订阅

4)Promise对象

**:有错误的欢迎指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值