Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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

AltStyle によって変換されたページ (->オリジナル) /