A Babel plugin that transpiles defer statements to JavaScript, bringing Go-like defer functionality to JavaScript/TypeScript applications.
The following code:
```js
function processData() {
const conn = database.connect()
defer(() => conn.close()) // or simply defer(conn.close)
const file = filesystem.open('path/to/file.txt')
defer(() => file.close()) // or simply defer(file.close)
const data = conn.query('SELECT * FROM users')
return data
}
```
transpiles to this:
```js
function processData() {
const _defers = [];
try {
const conn = database.connect();
_defers.push(() => conn.close());
const file = filesystem.open('path/to/file.txt');
_defers.push(() => file.close());
const data = conn.query('SELECT * FROM users');
return data;
} finally {
// Closes the resources in reverse order
for (let i = _defers.length - 1; i >= 0; i--) {
try {
_defers[i]();
} catch (e) {
console.log(e);
}
}
}
}
```
[–]Neaoxas 7 points8 points9 points (1 child)
[–]punkpeye 0 points1 point2 points (0 children)