Объявление using — это предложение TC39 Stage 3, которое обеспечивает автоматическое, детерминированное освобождение ресурсов в JavaScript. Когда переменная, объявленная с using, выходит из области видимости, её логика очистки запускается автоматически — без необходимости делать это вручную.
Ключевое слово using полагается на Symbol.dispose — специальный встроенный символ, который определяет, как ресурс очищает сам себя. Когда блок завершает работу, JavaScript автоматически вызывает [Symbol.dispose]() на объявленной переменной.
{
using file = openFile("data.txt");
// работаем с file...
} // file[Symbol.dispose]() вызывается автоматически здесь
Symbol.disposeЧтобы сделать объект совместимым с using, он должен реализовать метод Symbol.dispose:
const resource = {
[Symbol.dispose]() {
console.log("Resource cleaned up");
}
};
{
using r = resource;
} // выводит "Resource cleaned up"
try/finally только ради освобождения ресурсовДля асинхронной очистки синтаксис await using работает с Symbol.asyncDispose:
{
await using connection = await openConnection();
} // await connection[Symbol.asyncDispose]() вызывается автоматически
using в паре с Symbol.dispose привносит управление ресурсами в стиле RAII (распространённое в C++ и C#) в JavaScript. Любой объект, реализующий [Symbol.dispose](), становится одноразовым ресурсом, предоставляя разработчикам чистый и надёжный паттерн для работы с файлами, соединениями, блокировками и похожими ресурсами.
Декларация using автоматически вызывает Symbol.dispose() на ресурсе, когда выполнение блока завершается, гарантируя детерминированную очистку независимо от способа выхода из блока.
Новый — ещё не проверен сообществом
Вы