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().
Спецификации
Совместимость с браузерами
| 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.disposeusingAsyncDisposableStack
© 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