Javascript中生成器函数和Generator对象的介绍与使用

✨Generator

🎶Generator的描述

Generator 函数是ES6提供的一种异步编程解决方案

🎉三种异步方法出现的顺序引用黑马程序员

🍧Generator的 核心语法

// 像下面这样 func 这样的函数称之为生成器函数
// 通过 * 进行声明 通过yield进行等待 
function* func(){
	yield '1'
	yield '2'
	}

Generator 对象由生成器函数返回并且它符合可迭代协议和迭代器协议。
生成器函数在执行时能暂停,后面又能从暂停处继续执行。

 const f =func() //根据上面定义:Generator对象是由 生成器函数返回 ,这里f就是一个Generator对象
 
 f.next() //func() 不会立即执行func生成器函数 而是需要通过f.next()才能执行func() 遇到yield暂停  
 // f.next()的返回值是一个对象, {value:'yield后面的值',done:false/true}
// done:是否执行完毕,false:可以继续执行;true :已经执行完完毕
// value:yield 后面的值
 // 输出的样式是这样的 {value:'1',done:false} value是下一个yield 后面的表达式 done表示是否执行完毕了,
 //再次基础上再 f.next()的话 返回的就是{value:'2',done:true} 说明这个Generator对象已经执行完毕了

for(const iterator of f){
	console.log(iterator)// 1  2
 } //我们可以通过  for of 遍历Generator对象  拿到yield后面的每一个值

🎐Generator管理异步

核心步骤:异步操作之前加上yield

  function* cityGenerator () {
      yield axios('http://hmajax.itheima.net/api/city?pname=北京')
      yield axios('http://hmajax.itheima.net/api/city?pname=广东省')
    }


    // 获取 Generator对象
    const city = cityGenerator()

    //由于axios的返回值是一个Promise 
    // console.log(city.next()) //{value: Promise, done: false}

    // 通过next方法执行代码,并获取结果 通过Promise的then方法实现异步处理
    city.next().value.then(res => {
      console.log('res:', res)
      return city.next().value
    }).then(res => {
      console.log('res:', res)
    })

在这里插入图片描述

可见Generator的定义与 async await 很相似,但是使用上没有后者不方便,后者出现的时间又比前者晚,常听到人们说: 后者是前者的语法糖

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

、信仰_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值