Этот пост еще раз посвящается пропозалу по завершению ресурсов. Как вы знаете, у нас появляется Symbol.dispose и Symbol.asyncDispose, а также ключевые слова using и await using (пишется вместо let, const, var) Сегодня накидал такой пример и я удивился тому, что это прям defer во всей красе! Но прежде, давайте взглянем вот на такой пример: `class A { doWork(){ console.log('doing some work') throw new Error('OOPS!') }
Symbol.dispose{ console.log('dispose called') } }
function main(){ const a = new A() a.doWork() // ошибка OOPS } main()
Итак. У нас упадет ошибка, очевидно. Но все меняется, если у нас появляется using
`function main(){ using a = new A() a.doWork() // ошибка OOPS }
Поскольку мы получим следующие сообщения `doing some work OOPS dispose called
И вот тут Dispose раскрывается во всей красе! Наши тесты используют WebSocket и если у нас упала ошибка на проверке - сокет не закрывался сам, а был "зависший". Как итог - мы получаем "лишние" сообщения на заднем плане. А теперь, после определенного рефакторинга мы увидим, что сокет закрывается и он не "завис". Поскольку пример с ошибкой работает как с Dispose, так и AsyncDispose
Ставь реакцию, если не знал, что (async)Dispose отработает после "экстренного" выхода(throw).
#js #javascript #typescript #ts #nodejs #tip_of_the_day @haradkou_sdet```