ES6标准入门(第 3 版)
15.6 迭代器对象的 return(),throw()
阅读(

ECMAScript 6 简介

let 和 const 命令

变量的解构赋值

字符串的扩展

正则的扩展

数值的扩展

函数的扩展

数组的扩展

对象的扩展

Symbol

Set 和 Map 数据结构

Proxy

Reflect对象

Promise对象

Iterator 和 for...of 循环

ES6 Iterator(迭代器)的概念

ES6 默认Iterator接口

ES6 调用Iterator接口的场合

ES6 字符串的Iterator接口

ES6 Iterator接口与 Generator函数

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

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

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

function readLinesSync(file) {
  return {
    next() {
      return { done: false };
    },
    return() {
      file.close();
      return { done: true };
    },
  };
}

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

// 情况一
for (let line of readLinesSync(fileName)) {
  console.log(line);
  break;
}

// 情况二
for (let line of readLinesSync(fileName)) {
  console.log(line);
  continue;
}

// 情况三
for (let line of readLinesSync(fileName)) {
  console.log(line);
  throw new Error();
}

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

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

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

如果本教程对您帮助很大,请随意打赏。您的支持,将鼓励我们提供更好的教程!

← 键盘方向键翻页 →
返回顶部 手机访问 关注微信 返回底部

扫码访问歪脖网

随时随地,想看就看

关注歪脖网微信

分享 web 知识、交流 web 经验