UNPKG

seitu

Version:
83 lines (53 loc) • 1.51 kB
# createDebouncedFn Wraps a plain function. The return value becomes subscribable state. Each call resets the debounce timer. ```ts import { createDebouncedFn } from 'seitu' const search = createDebouncedFn((q: string) => fetch(`/api?q=${q}`), 300) search('hello') search.get() search.subscribe(result => console.log('result:', result)) ``` ## Signature ```ts function createDebouncedFn<F extends (...args: any[]) => any>(fn: F, wait: number): DebouncedFn<F> ``` ## Interface ```ts interface DebouncedFn<F> extends Readable<ReturnType<F> | undefined>, Subscribable<ReturnType<F> | undefined> { (...args: Parameters<F>): void } ``` Callable + readable + subscribable. `get()` returns `undefined` until first execution. ## Common Mistakes ### [HIGH] Using createDebounced on a function Wrong: ```ts createDebounced(fn, 300) ``` Correct: ```ts createDebouncedFn(fn, 300) ``` createDebounced wraps subscribables; createDebouncedFn wraps callables. ### [MEDIUM] Expecting synchronous return from call Wrong: ```ts const result = debouncedFn() ``` Correct: ```ts debouncedFn(); const result = useSubscription(debouncedFn) ``` Return value updates after debounced execution via subscription. ### [MEDIUM] Not subscribing to fn result Wrong: ```ts debouncedFn(args) // never read output ``` Correct: ```ts debouncedFn(args); debouncedFn.subscribe(console.log) ``` DebouncedFn is Subscribable; subscribe or useSubscription to read latest result. ## Source `src/core/debounced-fn/index.ts`