Как сделать наблюдаемый debounceTime условным - PullRequest
0 голосов
/ 29 октября 2018

У меня есть простой отклик на событие ввода элемента, например:

Observable
        .fromEvent(this.elInput.nativeElement, 'input')
        .debounceTime(2000)
        .subscribe(event => this.onInput(event));

Я бы хотел сделать условное отклонение основанным на значении события при его выдаче, возможно ли это?

Спасибо

1 Ответ

0 голосов
/ 29 октября 2018

Да, это вполне возможно. Просто используйте оператор 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...