New:Microsoft Teams Notifications Are Now Available in Socket.Learn more →
Get Started

controlly

Package Overview
Dependencies
Maintainers
1
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

controlly

Async control flow: retry with backoff, timeout, concurrency limit, sleep, debounce, throttle. Zero deps.

latest
npmnpm
Version
1.1.0
Version published
Maintainers
1
Created
Source

controlly

Async control-flow toolkit — sleep, deferred, timeout, retry with backoff, concurrency limit, debounce, throttle. Zero dependencies, ESM + CJS + TypeScript types.

npm install controlly
import {
  sleep, deferred, withTimeout, retry, pLimit, debounce, throttle,
} from "controlly";

await sleep(200);

// Retry with exponential backoff
const data = await retry(() => fetch("/api").then((r) => r.json()), {
  retries: 3,
  minDelay: 100,
  factor: 2,
  onRetry: (err, attempt) => console.warn(`retry #${attempt}`, err),
});

// Timeout any promise
await withTimeout(slowTask(), 5000, "slowTask took too long");

// Limit concurrency
const limit = pLimit(2);
await Promise.all(urls.map((u) => limit(() => fetch(u))));

// Externally-resolvable promise
const d = deferred<number>();
setTimeout(() => d.resolve(42), 10);
await d.promise; // 42

const onScroll = throttle(() => render(), 100);
const onType   = debounce((q: string) => search(q), 300);

API

FonctionDescription
sleep(ms, signal?)Promise résolue après ms (annulable via AbortSignal)
deferred<T>(){ promise, resolve, reject }
withTimeout(promise, ms, msg?)Rejette TimeoutError au-delà de ms
retry(fn, opts?)Backoff exponentiel : retries, minDelay, factor, maxDelay, onRetry, shouldRetry, signal
pLimit(n)Limiteur de concurrence (.active, .pending)
debounce(fn, ms)+ .cancel() / .flush()
throttle(fn, ms)Bord montant + trailing

Tout est typé strictement. retry/sleep respectent AbortSignal.

License

MIT © KIPDEV

Keywords

retry

FAQs

Package last updated on 25 Jun 2026

Related posts