Generator

这篇博客介绍了ES6中的Generator函数如何解决异步编程问题。Generator是一个状态机,通过yield暂停和恢复函数执行,并可用于创建可遍历的对象。示例展示了如何使用Generator实现for...of遍历对象。此外,还提到了将Generator与Symbol.iterator结合,使对象能够被for...of遍历。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念

  • ES6提供的解决异步编程的方案之一
  • Generator函数是一个状态机,内部封装了不同状态的数据
  • 用来生成遍历器对象
  • 惰性求值。可以暂停函数,yield可以暂停函数,而next方法可以启动函数,返回值为yield之后的返回结果

特点

  • function与函数名之间有一个符号*
  • 内部使用yield来定义不同的状态
  • generator函数返回的是指针对象,而不会执行函数内部逻辑
  • 调用next方法会从函数内部逻辑开始执行,遇到yield就停止,返回{value:yield之后的表达式结果/undefined, done:false/true}
  • 再次调用next方法,会从上一次停止的yield之后开始执行
  • yield语句返回结果大多数为undefined,当调用next方法时,传参内容会作为启动时yield的返回值
      // Generator函数
      // 当执行完所有的yield语句之后,返回值为{value: undefined, done: true}
      function* myGenerator() {
        console.log("开始执行函数");
        yield "yield -- 第一次暂停";
        console.log("开始启动");
        yield "yield -- 第二次暂停";
        console.log("开始第二次启动");
      }

      let my = myGenerator();
      console.log(my.next());
      console.log(my.next());
      console.log(my.next());
  • 实现对象for of遍历
      // 对象默认无法使用for of进行遍历,使用Symbol.iterator与Generator函数结合,可以实现for of遍历
      let obj = {username: "admin", password: "12345"}

      obj[Symbol.iterator] = function* test() {
        yield obj.username
        yield obj.password
      }

      for (item of obj) {
        console.log(item);
      }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值