RxSwift throttle(), чтобы получить первый элемент

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

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

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

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

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

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

Есть идеи?

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

1 ответ

Решение

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

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

Другие вопросы по тегам