debounce
function stable operator
Выпускает уведомление из исходного Observable только после того, как истечёт определённый интервал времени, определяемый другим Observable, без других событий исходного источника.
debounce<T>(durationSelector: (value: T) => ObservableInput<any>): MonoTypeOperatorFunction<T>
Параметры
durationSelector | (value: T) => ObservableInput<any> | Функция, которая получает значение из исходного Observable, для вычисления интервала ожидания для каждого значения исходного источника, возвращаемого как Observable или Promise. |
Возвращает
MonoTypeOperatorFunction<T>: Функция, которая возвращает Observable, откладывающий выпускаемые события исходного Observable на заданный интервал Observable, возвращённый функцией durationSelector, и может пропускать некоторые значения, если они происходят слишком часто.
Описание
Это похоже на debounceTime, но интервал без выдачи событий определяется вторым Observable.
debounce откладывает уведомления, испускаемые исходным Observable, но отбрасывает предыдущие ожидаемые отложенные испускания, если появляется новое уведомление в исходном Observable. Этот оператор отслеживает последнее уведомление из исходного Observable и порождает Observable продолжительности, вызывая функцию durationSelector. Уведомление выпускается только тогда, когда Observable продолжительности выпускает следующее уведомление и если никакое другое уведомление не было выпущено в исходном Observable с момента порождения Observable продолжительности. Если новое уведомление появляется до того, как Observable продолжительности выпустит уведомление, предыдущее уведомление не будет выпущено, а новое время ожидания будет запланировано от durationSelector. Если завершающее событие происходит во время запланированного интервала, последнее кэшированное уведомление выпускается перед передачей завершающего события в выходной Observable. Если событие ошибки происходит во время запланированного интервала или после него, только событие ошибки передаётся в выходной Observable. Кэшированное уведомление в этом случае не выпускается.
Как и debounceTime, это оператор ограничения скорости и также оператор вида «задержка», так как выпускаемые события вывода не обязательно происходят в то же время, что и события в исходном Observable.
Пример
Выпустить последнее нажатие после всплеска нажатий
import { fromEvent, scan, debounce, interval } from 'rxjs';
const clicks = fromEvent(document, 'click');
const result = clicks.pipe(
scan(i => ++i, 1),
debounce(i => interval(200 * i))
);
result.subscribe(x => console.log(x)); См. также
© 2015–2022 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors.
Code licensed under an Apache-2.0 License. Documentation licensed under CC BY 4.0.
https://rxjs.dev/api/operators/debounce