import { ensure } from "https://deno.land/x/effection@3.0.0-beta.3/lib/ensure.ts";
Run the given function or operation when the current operation
shuts down. This is equivalent to running the function or operation
in a finally {}
block, but it can help you avoid rightward drift.
Examples
import { main, ensure } from 'effection';
import { createServer } from 'http';
await main(function*() {
let server = createServer(...);
yield* ensure(() => { server.close() });
});
Note that you should wrap the function body in braces, so the function
returns undefined
.
import { main, ensure, once } from 'effection';
import { createServer } from 'http';
await main(function*() {
let server = createServer(...);
yield* ensure(function* () {
server.close();
yield* once(server, 'closed');
});
});
Your ensure function should return an operation whenever you need to do
asynchronous cleanup. Otherwise, you can return void