Для немедленной реакции на первый клик и игнорирования следующих в течение окна подходит throttleFirst. debounce решает другую задачу: ждёт паузы в потоке.
Throttling button clicks via RxJava Observable subscription
Для немедленной реакции на первый клик и игнорирования следующих в течение окна подходит throttleFirst. debounce решает другую задачу: ждёт паузы в потоке.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Реализуйте подписку на наблюдаемый объект кнопки, которая позволяет ограничивать частоту ее нажатий.
val button: Observable<Boolean>? = null
Ваша задача — настроить подписку так, чтобы быстрые последовательные нажатия были ограничены стратегией ограничения частоты, предотвращая слишком частое срабатывание действия кнопки.
Ответ
Для немедленной реакции на первый клик и игнорирования следующих в течение окна подходит throttleFirst. debounce решает другую задачу: ждёт паузы в потоке.
val disposable = button
?.throttleFirst(500, TimeUnit.MILLISECONDS)
?.subscribe({ performAction() }, { showError(it) })
performAction и showError — обработчики приложения; Disposable нужно освобождать по lifecycle. Если Boolean обозначает нажатие/отпускание, до throttle добавьте filter { it }. Ограничение частоты не гарантирует, что предыдущая операция уже завершена: для запрета параллельных запросов дополнительно нужен busy-state или соответствующая стратегия сериализации.
Источник: reactivex.io.