Spec-Zone.ru › JavaScript

DisposableStack

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

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

Объект DisposableStack представляет собой стек обработчиков освобождения, которые должны быть выполнены при освобождении самого стека. Функции освобождения выполняются в обратном порядке регистрации с гарантированной обработкой ошибок. Вызов его метода move() передаст ответственность за вызов текущих зарегистрированных обработчиков освобождения новому DisposableStack и предотвратит регистрацию любых дополнительных обработчиков.

Описание

DisposableStack не является "стеком" в строгом смысле своего интерфейса. Он имеет несколько методов для добавления обработчиков освобождения, но не имеет способа удалить один обработчик. Вместо этого все обработчики освобождения извлекаются и выполняются один за другим при освобождении стека.

Вы регистрируете освобождаемые ресурсы в DisposableStack, используя его методы use(), adopt() или defer().

using disposer = new DisposableStack();
const reader = disposer.use(stream.getReader());

Затем, когда disposer выходит из области видимости, все зарегистрированные в нем ресурсы освобождаются в обратном порядке регистрации, если они не были перемещены с помощью move().

Хорошей практикой является не выносить выражение получения ресурса в отдельное утверждение, независимо от того, насколько длинным оно является. Вы всегда должны обернуть вызов use() или adopt() вокруг выражения получения ресурса, чтобы гарантировать немедленную регистрацию ресурса в стеке.

using disposer = new DisposableStack();
const reader = stream.getReader();
disposer.use(reader);

Функционально эти два фрагмента кода эквивалентны. Однако первый вариант менее подвержен ошибкам, поскольку ресурс объявляется и регистрируется в одной строке. Если кто-то вставит больше кода между второй и третьей строками второго фрагмента, может возникнуть ошибка, приводящая к утечке ресурса.

Конструктор

DisposableStack()
Создает новый объект DisposableStack.

Свойства экземпляра

Эти свойства определены в DisposableStack.prototype и разделяются всеми экземплярами DisposableStack.

DisposableStack.prototype.constructor
Конструкторская функция, которая создала объект экземпляра. Для экземпляров DisposableStack начальным значением является конструктор DisposableStack.
DisposableStack.prototype.disposed
Только для чтения. Возвращает true, если DisposableStack был освобожден, или false, если нет.
DisposableStack.prototype[Symbol.toStringTag]
Начальным значением свойства [Symbol.toStringTag] является строка "DisposableStack". Это свойство используется в Object.prototype.toString().

Методы экземпляра

DisposableStack.prototype.adopt()
Регистрирует значение, не реализующее протокол освобождения, в стеке, предоставляя пользовательскую функцию освобождения.
DisposableStack.prototype.defer()
Принимает функцию обратного вызова, которая будет вызвана при освобождении стека.
DisposableStack.prototype.dispose()
Освобождает этот стек, вызывая все зарегистрированные в нем обработчики освобождения в обратном порядке регистрации.
DisposableStack.prototype.move()
Создает новый экземпляр DisposableStack, который содержит те же обработчики освобождения, что и этот стек, а затем помечает этот стек как освобожденный, не вызывая никаких обработчиков.
DisposableStack.prototype.use()
Регистрирует в стеке значение, реализующее протокол освобождения.
DisposableStack.prototype[Symbol.dispose]
Псевдоним для метода dispose().

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

Спецификация
ECMAScript Async Explicit Resource Management
# sec-disposablestack-objects

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

Desktop Mobile Server
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
DisposableStack
134
134
141
119
preview
134
141
88
No
29.0
134
No
1.3.0
2.2.10
24.0.0
@@dispose
134
134
141
119
preview
134
141
88
No
29.0
134
No
1.3.0
2.2.10
24.0.0
DisposableStack
134
134
141
119
preview
134
141
88
No
29.0
134
No
1.3.0
2.2.10
24.0.0
adopt
134
134
141
119
preview
134
141
88
No
29.0
134
No
1.3.0
2.2.10
24.0.0
defer
134
134
141
119
preview
134
141
88
No
29.0
134
No
1.3.0
2.2.10
24.0.0
dispose
134
134
141
119
preview
134
141
88
No
29.0
134
No
1.3.0
2.2.10
24.0.0
disposed
134
134
141
119
preview
134
141
88
No
29.0
134
No
1.3.0
2.2.10
24.0.0
move
134
134
141
119
preview
134
141
88
No
29.0
134
No
1.3.0
2.2.10
24.0.0
use
134
134
141
119
preview
134
141
88
No
29.0
134
No
1.3.0
2.2.10
24.0.0

См. также

  • Полифил для DisposableStack в core-js
  • Управление ресурсами JavaScript
  • Symbol.dispose
  • using
  • AsyncDisposableStack

© 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/DisposableStack

Spec-Zone.ru

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