RxSwift Throttle() для получения первого элемента

Я ищу способ, которым оператор throttle() отказывается от первого элемента в Observable в течение заданного интервала времени, а не от последнего элемента.

Аналогичный вопрос был задан (и дан ответ) в RxSwift - Debounce/Throttle inverse, но там является несовершенством тех ответов, которых я хотел бы избежать. То есть в идеальном сценарии получается первый элемент, испускаемый в Observable, а любые будущие игнорируются в течение временного интервала. Однако при работе с window() или timer() возможно, что два элемента будут выполняться внутри заданного временного интервала, потому что таймер не работал параллельно началу вызова throttle(). Пример:

|..........|..........|..........|
                    ^   ^
                first   second

Они попадают в разные окна и поэтому оба принимаются несовершенным решением, описанным в связанном ответе.

В идеале должен быть способ перезапустить таймер, как только появится первый элемент в окне, чтобы приведенный выше пример вместо этого выглядел примерно так:

|..........|.......|..........|
                    ^   ^
                first   second (ignored)

Любые идеи?

Редактировать: чтобы быть ясным, я не уверен, как с этим справляется разновидность дросселя () RxSwift 3.0-beta1, но я ищу решение для реализаций RxSwift 2.x.


person RamwiseMatt    schedule 02.10.2016    source источник


Ответы (1)


Как оказалось, rxSwift 3.0 работает с throttle() именно так, как я хотел. Он берет элемент, а затем игнорирует любые другие элементы в течение x секунд (без «проблемы с окном», о которой я упоминал в вопросе).

Для полноты картины: debounce() по-прежнему работает в соответствии со «старым» определением регулирования rxSwift. То есть он принимает последний элемент в интервале времени.

person RamwiseMatt    schedule 04.10.2016