seitu
Version:
83 lines (53 loc) • 1.51 kB
Markdown
# 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`