Skip to content

Instantly share code, notes, and snippets.

@vs-borodin
Created December 20, 2025 21:01
Show Gist options
  • Select an option

  • Save vs-borodin/7f4b356e0e59eb1549235356cde5c617 to your computer and use it in GitHub Desktop.

Select an option

Save vs-borodin/7f4b356e0e59eb1549235356cde5c617 to your computer and use it in GitHub Desktop.
debounced
import {
assertInInjectionContext,
assertNotInReactiveContext,
inject,
INJECTOR,
type Injector,
type Signal,
} from '@angular/core';
import { toObservable, toSignal } from '@angular/core/rxjs-interop';
import { debounceTime } from 'rxjs';
export function debounced<T>(
signal: Signal<T>,
options: DebouncedOptions = { time: 300 }
): Signal<T> {
if (ngDevMode) {
assertNotInReactiveContext(debounced);
}
if (ngDevMode && !options.injector) {
assertInInjectionContext(debounced);
}
const injector = options.injector || inject(INJECTOR);
return toSignal(toObservable(signal, { injector }).pipe(debounceTime(options.time)), {
initialValue: signal(),
injector,
});
}
export interface DebouncedOptions {
readonly time: number;
readonly injector?: Injector;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment