⏲
Go defer на JS ⏲
В Go есть очень крутой оператор defer, он позволяет отложить выполнение какой-либо операции на конец функции (неважно это return или выброс ошибки на текущем или ниже уровнях)
Например, закрыть доступ к базе при выходе из функции где мы его открыли будет выглядеть примерно так:
- - - -
db := pg.connect()
defer db.destroy()
// Куча всякой логики и если будет return или выброс ошибки db.destroy() отработает
// ...
- - - -
Всегда сетовал, что в JS, не было такого оператора, но я наконец-то нашел ему хоть какую-то алтернативу и это try ... finally ...
Вроде, очевидно, но я почему-то никогда об этом не думал, поэтому пример выше будет таким:
- - - -
const db = pg.connect()
try {
// Куча всякой логики и если будет return или выброс ошибки db.destroy() отработает
// ...
} finally {
db.destroy()
}
- - - -
Не так элегантно, но дает возможность на 100% выполнить операцию при любом выходе из функции
Сделал
gist с тестами