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))