迭代器对象的 return(),throw()

迭代器对象除了具有next()方法,还可以具有return()方法和throw()方法。如果你自己写迭代器对象生成函数,那么next()方法是必须部署的,return()方法和throw()方法是否部署是可选的。

return()方法的使用场合是,如果for...of循环提前退出(通常是因为出错,或者有break语句或continue语句),就会调用return()方法。如果一个对象在完成遍历前,需要清理或释放资源,就可以部署return()方法。

  1. function readLinesSync(file) {
  2. return {
  3. next() {
  4. return { done: false };
  5. },
  6. return() {
  7. file.close();
  8. return { done: true };
  9. },
  10. };
  11. }

上面代码中,函数readLinesSync接受一个文件对象作为参数,返回一个迭代器对象,其中除了next()方法,还部署了return()方法。下面的三种情况,都会触发执行return()方法。

  1. // 情况一
  2. for (let line of readLinesSync(fileName)) {
  3. console.log(line);
  4. break;
  5. }
  6. // 情况二
  7. for (let line of readLinesSync(fileName)) {
  8. console.log(line);
  9. continue;
  10. }
  11. // 情况三
  12. for (let line of readLinesSync(fileName)) {
  13. console.log(line);
  14. throw new Error();
  15. }

上面代码中,情况一输出文件的第一行以后,就会执行return()方法,关闭这个文件;情况二输出所有行以后,执行return()方法,关闭该文件;情况三会在执行return()方法关闭文件之后,再抛出错误。

注意,return()方法必须返回一个对象,这是 Generator 规格决定的。

throw()方法主要是配合 Generator 函数使用,一般的迭代器对象用不到这个方法。请参阅《Generator 函数》一章。

es6 迭代器对象的 return(),throw()相关推荐

  1. es6 迭代器_揭秘ES6迭代器和迭代器

    es6 迭代器 by Tiago Lopes Ferreira 由Tiago Lopes Ferreira 揭秘ES6迭代器和迭代器 (Demystifying ES6 Iterables & ...

  2. ES6 迭代器与生成器(非常详细、容易理解)

    下面是对ES6中迭代器和生成器的整理,非常详细.容易理解,希望可以帮助到有需要的小伙伴~ 文章目录 迭代器是什么 Iterator接口 迭代协议 for...of语句的用法 返回迭代器对象的方法 与f ...

  3. 【ES6】对象的拓展

    [ES6]对象的拓展 一.对象的两种表示法[掌握] 1)简洁表示法 2)属性名表达式法 二.Object.is()[了解] 三.Object.assign()[了解] 查看更多ES6教学文章: 参考文 ...

  4. python学习Day14 带参装饰器、可迭代对象、迭代器对象、for 迭代器工作原理、枚举对象、生成器及生成表达式...

    复习 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.返回内部函数对象---->  延迟执行, 开放封闭原则: 功能可以拓展,但源代 ...

  5. 传入json对象_【Python基础】可迭代对象amp;迭代器对象及其实现

    可迭代对象 首选确保for循环的in后面是一个可迭代对象,这样就能通过python内置函数iter()得到一个迭代器对象(iterator) 我们分别把列表list_test和字符串str_test分 ...

  6. 第九节:ES6为对象做了哪些扩展?

    ES6不仅为字符串.数值和数组带来了扩展,也为对象带来了很多新特性.这一节,我们来一起学习一下对象的扩展. 对象的传统表示法 我们回顾一下,对象的传统表示法: let person = { " ...

  7. python迭代-可迭代对象与迭代器对象

    可迭代对象与迭代器对象 问题举例 某软件要求,从网络抓取各个城市的气温信息,并依次显示: 北京:15~22 上海:18~23 ...... 如果一次抓取所有城市气温信息再显示,显示第一个城市的气温时会 ...

  8. es6调用c语言sdk,ES6 关于对象的扩展-contracts-WinFrom控件库|.net开源控件库|HZHControls官网...

    今天来简单说下ES6 中对象的扩展 首先回顾传统的对象表示法 let person={ 'name':'zhang', 'age':'20', 'play':function(){ alert('pl ...

  9. python:迭代器对象,迭代器和迭代

    学习目标: 一.了解迭代对象.迭代器和迭代的区别和联系. 二.迭代对象有哪些? 三.关于迭代器和生成器 1. 迭代器的定义: 2. 迭代器的创建: 3. 迭代器的判断. 四.迭代的使用 学习内容: P ...

最新文章

  1. 一文带你看懂Spring事务!
  2. MimbleWimble 系列之Pedersen 承诺
  3. linux 导入txt_手机混用闪存到底是真是假:教你查手机闪存型号|闪存|手机|linux|ufs|zip...
  4. mysql 生成数列_PHP生成器的创建和使用
  5. 12.Linux:exec函数族
  6. linux常用指令笔记(1)
  7. Divide by three, multiply by two CodeForces - 977D (思维排序)
  8. WinSock嗅探虚拟主机拿站取webshell
  9. php 中文键名 问题,PHP中使用asort进行中文排序失效的问题处理
  10. 通过Java和Spring Boot应用程序将Gmail用作SMTP服务器
  11. Linux中Docker部署Tomcat
  12. linux系统MongoDB4.0安装,密码设置,常用命令,集成springmvc
  13. 共享变量在线程间的可见性
  14. linux系统可以装sas吗,在SAS硬盘上Linux安装注意的事情。
  15. Meta分析在生态环境领域里的应用
  16. 分享五款可以大幅度提升办公效率的实用软件
  17. VS/C#添加chart控件
  18. ubuntu hashcat 安装
  19. win10系统开机出现grub,一步进入window系统
  20. python代码混淆工具,Python版代码混淆工具

热门文章

  1. GridView”的控件 必须放在具有 runat=server 的窗体标记内 “错误提示”
  2. java 将list按指定大小等分,最后多余的单独一份
  3. php ajax练习
  4. linux 命令全集
  5. 如何及时还原被删除的活动目录对象
  6. 教你进入有密码 Windows XP 系统的方法
  7. TiDB-新一代数据库入门介绍
  8. 设置IDEA显示Services窗口,方面服务启动关停等操作
  9. Jessica Kerr:高绩效团队简史
  10. ES6的Promise -- 逻辑执行的顺序