Iterator.prototype[Symbol.dispose]()

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

[Symbol.dispose]() 方法是 Iterator 实例的一个方法,它实现了可处置协议,并允许在与 using 语句一起使用时对其进行处置。如果存在,它会调用 `this` 的 return() 方法。

语法

js
iterator[Symbol.dispose]()

参数

无。

返回值

无(undefined)。

示例

使用 using 声明迭代器

Symbol.dispose 方法旨在被 using 声明自动调用。如果你有一个通过调用其 next() 方法来手动迭代的迭代器,这将非常有用;如果你使用 for...of 或类似的语句来迭代它,则错误处理和清理会自动完成。

js
function* generateNumbers() {
  try {
    yield 1;
    yield 2;
    yield 3;
  } finally {
    console.log("Cleaning up");
  }
}

function doSomething() {
  using numbers = generateNumbers();
  const res1 = numbers.next();
  // Not iterating the rest of the numbers
  // Before the function exits, the async iterator is disposed
  // Logs "Cleaning up"
}

doSomething();

规范

规范
ECMAScript 异步显式资源管理
# sec-%iteratorprototype%-@@dispose

浏览器兼容性

另见