-
Notifications
You must be signed in to change notification settings - Fork 0
debounce
awekrx edited this page May 29, 2026
·
1 revision
import { debounce } from '@dev-suite/decorators/debounce'
method
Suppress bursty method calls and run only after quiet period.
- Ad-hoc
setTimeout/clearTimeoutblocks - UI-specific debounce wrappers around domain methods
class SearchController {
private timer?: ReturnType<typeof setTimeout>;
onInput(query: string) {
clearTimeout(this.timer);
this.timer = setTimeout(() => this.search(query), 250);
}
private search(query: string) {}
}import { debounce } from '@dev-suite/decorators/debounce';
class SearchController {
@debounce({ waitMs: 250 })
onInput(query: string) {
this.search(query);
}
private search(query: string) {}
}- No timer plumbing in controller method.
- Debounce policy is visible at method boundary.
class AutosaveController {
private timer?: ReturnType<typeof setTimeout>;
onDraftChange(draft: Draft) {
clearTimeout(this.timer);
this.timer = setTimeout(() => this.api.saveDraft(draft), 1000);
}
}import { debounce } from '@dev-suite/decorators/debounce';
class AutosaveController {
@debounce({ waitMs: 1000, keyResolver: ([draft]) => String(draft.id) })
onDraftChange(draft: Draft) {
this.api.saveDraft(draft);
}
}- Supports per-entity debounce via keyResolver.
- Avoids duplicated autosave debounce code.