Spec-Zone.ru › JavaScript

Symbol.asyncDispose

Baseline Ограниченная доступность

Эта функция не является Baseline, поскольку она не работает в некоторых из наиболее широко используемых браузеров.

Статическое свойство данных Symbol.asyncDispose представляет собой хорошо известный символ Symbol.asyncDispose. Объявление await using ищет этот символ в инициализаторе переменной для метода, который будет вызван, когда переменная выйдет из области видимости.

Значение

Хорошо известный символ Symbol.asyncDispose.

Атрибуты свойства Symbol.asyncDispose
Записываемый нет
Перечисляемый нет
Настраиваемый нет

Описание

Объект является асинхронно уничтожаемым, если он имеет метод [Symbol.asyncDispose](). Ожидается, что метод будет иметь следующие семантики:

  • Вызов этого метода уведомляет объект AsyncDisposable о том, что вызывающий объект не намерен продолжать использовать этот объект. Этот метод должен выполнять любую необходимую логику для явного освобождения ресурса, включая, но не ограничиваясь, дескрипторы файловой системы, потоки, объекты хоста и т. д.
  • Этот метод может возвращать обещание, которое будет ожидаться перед продолжением.
  • При возникновении исключения из этого метода обычно означает, что ресурс не удалось явно освободить. Объект AsyncDisposable не считается "уничтоженным" до тех пор, пока результирующее обещание не будет выполнено.
  • При многократном вызове одного и того же объекта функция не должна генерировать исключение. Однако это требование не применяется.

Примеры

Пользовательские асинхронные уничтожаемые объекты

[Symbol.asyncDispose] позволяет создавать пользовательские асинхронные уничтожаемые объекты. Дополнительную информацию см. в справке по await using.

class Disposable {
  #fileHandle;
  #disposed;

  constructor(handle) {
    this.#disposed = false;
    this.#fileHandle = handle;
  }

  async [Symbol.asyncDispose]() {
    await this.#fileHandle.close();
    this.disposed = true;
  }

  get isDisposed() {
    return this.disposed;
  }
}

const resource = new Disposable(await fs.open("my-file.txt", "r"));
{
  await using resourceUsed = resource;
  console.log(resource.isDisposed); // false
}
console.log(resource.isDisposed); // true

Спецификации

Спецификация
ECMAScript Async Explicit Resource Management
# sec-well-known-symbols

Совместимость с браузерами

Настольные компьютеры Мобильные устройства Сервер
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
asyncDispose
127
127
141
113
preview
127
141
84
Нет
28.0
127
Нет
1.0.23
1.37
24.0.0
20.4.0–21.0.0Доступно только для ресурсов fs и stream.
18.18.0–19.0.0Доступно только для ресурсов fs и stream.

См. также

  • Polyfill Symbol.asyncDispose в core-js
  • Управление ресурсами в JavaScript
  • Symbol.dispose
  • await using
  • AsyncDisposableStack.prototype[Symbol.asyncDispose]()
  • AsyncIterator.prototype[Symbol.asyncDispose]()

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/asyncDispose

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API