async function bracket(acquire, release, process) {
const resources = await acquire()
try {
return process(resources)
} finally {
release(resources)
}
}
bracket(
async () => Promise.resolve({conn: 'A database connection'})
, async ({conn}) => { console.info('Cleanup conn: ', conn); return Promise.resolve() }
, async ({conn}) => { console.info('Process conn: ', conn); return 'result of process' }
)
.then(r => console.log('result =', r))
.catch(e => console.error('error =', e))