Да, это вполне возможно. Просто используйте оператор debounce
вместо debounceTime
. Передается функция выбора, которая получает уведомление о предыдущих операторах при вызове.
В вашем примере:
Observable
.fromEvent(this.elInput.nativeElement, 'input')
.debounce(ev => ev.hasSomeValue ? timer(2000) : EMPTY)
.subscribe(event => this.onInput(event));
Функция селектора ожидает ObservableLike
и ожидает его выдачи перед отправкой последнего уведомления, полученного debounce
. Все остальные уведомления отбрасываются, как при debounceTime
. Вы можете использовать EMPTY
для немедленной пересылки уведомления без тайм-аута (хотя это будет асинхронно, см. Ниже)
Из learn-rxjs :
Несмотря на то, что debounceTime не так широко используется, debounce важен, когда уровень отклонений является переменным!
Примечание: Debounce всегда будет асинхронно планировать пересылку последнего значения, даже если внутренний Observable генерирует мгновенно. Чтобы избежать этого, вам нужно создать второе наблюдаемое и использовать filter
, чтобы избежать всего debounce
.