AsyncIterator.prototype[Symbol.asyncDispose]()

可用性有限

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

[Symbol.asyncDispose]() 方法是 AsyncIterator 实例的一部分,它实现了异步可处置协议,并允许在使用 await using 时被处置。如果 this 存在 return() 方法,它会调用并等待该方法。

语法

js
asyncIterator[Symbol.asyncDispose]()

参数

无。

返回值

无(undefined)。

示例

使用 await using 声明一个异步迭代器

Symbol.asyncDispose 方法旨在在 await using 声明中自动调用。如果您有一个手动调用其 next() 方法来迭代的异步迭代器,那么这一点非常有用;如果您使用 for await...of 或类似方式进行迭代,那么错误处理和清理将自动完成。

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

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

doSomething();

规范

规范
ECMAScript 异步显式资源管理
# sec-asyncdisposablestack.prototype-@@asyncDispose

浏览器兼容性

另见