Skip to content

lbb00/controla

Repository files navigation

Controla

Control your function easily.

Npm Bundlephobia Coverage Typescript License Npm download

Install

npm install controla

API

controlAsyncFunction

import { controlAsyncFunction } from 'controla' const outerAbortController = new AbortController() const { run, abort } = controlAsyncFunction( async ({ signal }) => { return 'Hello, world!' }, { signal: outerAbortController.signal, // Optional, AbortSignal timeout, // Optional, ms } )

controlSingleFlight

Deduplicate concurrent async calls into a single shared "flight", with optional idle cache window and per-call controls.

import { controlSingleFlight } from 'controla' // Your flight function (single-flight deduped); use AbortSignal to support cancellation const fetchUser = async ({ signal }: { signal?: AbortSignal }) => { const res = await fetch('/api/user', { signal }) if (!res.ok) throw new Error('request failed') return (await res.json()) as { id: string; name: string } } // Minimal usage const { run, abortAll } = controlSingleFlight(fetchUser, { timeout: 10_000, idleReleaseTime: 1000 }) const u1 = await run().promise // shared flight for concurrent callers const u2 = await run().promise // reused within idle window await run({ refresh: true }).promise // force a new flight await run({ timeout: 500 }).promise // per-call timeout abortAll() // abort underlying flight for everyone

Key points:

  • run(options) returns { promise, abort }
  • options: signal?, timeout?, refresh?
  • Factory options: timeout, idleReleaseTime
  • Extra: abortAll() to cancel the active shared flight

About

Control your async function easily.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •