Spec-Zone.ru › JavaScript

AsyncDisposableStack.prototype.disposeAsync()

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

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

Метод disposeAsync() экземпляров AsyncDisposableStack освобождает этот стек, вызывая все зарегистрированные для него освобождающие функции в обратном порядке регистрации, ожидая завершения каждой перед вызовом следующей. Если стек уже освобожден, этот метод ничего не делает.

Он выполняет то же действие, что и await using disposer = new AsyncDisposableStack() при выходе из области видимости. Его можно использовать, если вам нужно выполнить очистку в точке, отличной от выхода из области видимости.

Синтаксис

disposeAsync()

Параметры

Нет.

Возвращаемое значение

Новый Promise, который разрешается с undefined, когда все зарегистрированные освобождающие функции завершились последовательно.

Исключения

disposeAsync() никогда не генерирует ошибку синхронно. Возвращаемый promise может быть отклонен с одной из следующих ошибок:

SuppressedError
Выбрасывается, если несколько освобождающих функций в стеке вызвали ошибку. Если выброшена только одна ошибка, она повторно выбрасывается как есть. В противном случае, для каждой дополнительной ошибки создается новый SuppressedError, где исходная ошибка является свойством suppressed, а новая ошибка — свойством error.

Примеры

Освобождение стека

Здесь мы добавляем три освобождающие функции в стек, используя методы use(), adopt() и defer(). Когда вызывается disposeAsync(), освобождающие функции вызываются в обратном порядке регистрации.

Обратите внимание, что обычно вам не нужно вызывать disposeAsync() вручную. Объявите стек с помощью await using, и его метод [Symbol.asyncDispose]() будет автоматически вызван, когда стек выйдет из области видимости.

class Resource {
  #doDisposal() {
    // Imagine more meaningful disposal logic here
    return new Promise((resolve) => {
      setTimeout(resolve, 1000);
    });
  }
  async dispose() {
    await this.#doDisposal();
    console.log("Resource disposed");
  }
  async [Symbol.asyncDispose]() {
    await this.#doDisposal();
    console.log("Resource disposed via Symbol.asyncDispose");
  }
}

async function doSomething() {
  const disposer = new AsyncDisposableStack();
  const resource = disposer.use(new Resource());
  const resource2 = disposer.adopt(new Resource(), (resource) =>
    resource.dispose(),
  );
  disposer.defer(() => console.log("Deferred disposer"));
  disposer.disposeAsync();
  // Logs in order:
  // Deferred disposer
  // Resource disposed
  // Resource disposed via Symbol.dispose
}

doSomething();

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

Спецификация
ECMAScript Async Explicit Resource Management
# sec-asyncdisposablestack.prototype.disposeAsync

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

Настольные компьютеры Мобильные устройства Сервер
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
disposeAsync
134
134
141
119
preview
134
141
88
Нет
29.0
134
Нет
1.3.0
2.2.10
24.0.0

См. также

  • Управление ресурсами JavaScript
  • AsyncDisposableStack
  • AsyncDisposableStack.prototype.adopt()
  • AsyncDisposableStack.prototype.defer()
  • AsyncDisposableStack.prototype.use()
  • AsyncDisposableStack.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/AsyncDisposableStack/disposeAsync

Spec-Zone.ru

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