DisposableStack.prototype.defer()
Базовый уровень Ограниченная доступность
Эта функция не является базовой, потому что она не работает в некоторых из наиболее широко используемых браузеров.
Метод defer() экземпляров DisposableStack принимает функцию обратного вызова, которая будет вызвана при удалении стека.
Синтаксис
defer(onDispose)
Параметры
-
onDispose - Функция, которая будет вызвана при удалении стека. Функция не принимает аргументов.
Возвращаемое значение
Нет (undefined).
Исключения
-
TypeError - Выбрасывается, если
onDisposeне является функцией. -
ReferenceError - Выбрасывается, если стек уже удален.
Описание
Основная цель defer() состоит в регистрации обратного вызова очистки, который не привязан к удалению конкретного ресурса. Если обратный вызов привязан к ресурсу, следует использовать use() или adopt(). Вы также можете использовать defer, когда ресурс не заявлен в вашем коде:
function consumeReader(reader) {
using disposer = new DisposableStack();
disposer.defer(() => reader.releaseLock());
// Do something with reader
}
Примеры
Использование defer()
Эта функция устанавливает простую блокировку, чтобы предотвратить одновременное выполнение нескольких асинхронных операций. Блокировка снимается, когда функция завершает работу.
let isLocked = false;
async function requestWithLock(url, options) {
if (isLocked) {
return undefined;
}
using disposer = new DisposableStack();
isLocked = true;
disposer.defer(() => (isLocked = false));
const data = await fetch(url, options).then((res) => res.json());
return data;
}
Спецификации
| Спецификация |
|---|
| ECMAScript Async Explicit Resource Management # sec-asyncdisposablestack.prototype.defer |
Совместимость с браузерами
| Десктопные | Мобильные | Серверные | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 | |
defer |
134 |
134 |
141 |
119 |
предварительная версия |
134 |
141 |
88 |
Нет |
29.0 |
134 |
Нет |
1.3.0 |
2.2.10 |
24.0.0 |
Смотрите также
- Управление ресурсами JavaScript
DisposableStackDisposableStack.prototype.adopt()DisposableStack.prototype.use()
© 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/defer