Effection Logo

function ensure

thefrontside/effection

function ensure(fn: () => Operation<unknown> | void): Operation<void>

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

Example 1

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.


Example 2

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


Parameters

fn: () => https://effection-www-s5a0jkwj0z5x.deno.dev/api/v3/Operation&lt;unknown> | void

Return Type

https://effection-www-s5a0jkwj0z5x.deno.dev/api/v3/Operation&lt;void>