407просмотров
34.8%от подписчиков
24 марта 2026 г.
📷 ФотоScore: 448
using — JS умеет закрывать ресурсы сам Каждый раз, когда открываешь соединение, файл или WebSocket — где-то в коде появляется finally. Не потому что хочется, а потому что без него ресурс утечёт, если между открытием и закрытием бросит исключение. const conn = db.connect();
try { return conn.query('SELECT ...');
} finally { conn.close(); // без этого будет утечка при любой ошибке выше
} ES2026 добавляет using. Работает как const, но при выходе из блока автоматически вызывает Symbol.dispose на объекте, даже если вылетело исключение. class DbConnection { Symbol.dispose { this.conn.close(); }
} function processData() { using db = new DbConnection(); return db.query('SELECT ...'); // conn.close() вызовется здесь автоматически
} Для асинхронных ресурсов — await using с Symbol.asyncDispose: async function writeLog() { await using handle = await openFile('log.txt'); await handle.write('done'); // файл закроется после строки выше, не нужен finally
} Это удобно в тестах. Раньше mock-сервер или тестовое соединение закрывали в afterEach, и это отдельный блок, который легко забыть или написать неправильно. С using ресурс живёт ровно столько, сколько длится тест: test('sends request', async () => { await using server = createMockServer(); // server.close() сам вызовется в конце теста
}); TypeScript поддерживает using с версии 5.2. Для браузеров нужен таргет ES2026 или полифил через Symbol.dispose. #frontendvk #javascript #typescript