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
Спецификации
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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.disposeawait usingAsyncDisposableStack.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