Текучий concatMapSingle без предварительной выборки, чтобы игнорировать щелчки до завершения обработки - PullRequest
0 голосов
/ 24 октября 2018

Я хочу обрабатывать щелчки таким образом, чтобы они игнорировались до тех пор, пока я выполняю обработку некоторого произошедшего щелчка.

Я думал, что смогу сделать это, используя противодавление, например так:

private val clicks = PublishProcessor.create<Unit>()

// ...

clicks
    .onBackpressureDrop()
    .concatMapSingle(::handleClick, 0)

Но это выдает ошибку, потому что есть требование, что concatMapSingle необходимо предварительно выбрать хотя бы один элемент, что заставляет его ставить в очередь клик и обрабатывать его сразу после завершения обработки, чтоне то, что я хочу.Я хочу обработать щелчок, только если в данный момент обработка не происходит.

Есть ли какой-нибудь другой оператор, который я мог бы использовать для достижения желаемого эффекта?

1 Ответ

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

Использование flatMapSingle вместо concatMapSingle делает трюк, , как предложено akarnokd на GitHub :

flatMap, будет извлекать только следующий восходящий элемент, еслитекущая фактически завершена

Последний параметр - maxConcurrency, указывающий максимальное количество активных подписок на SingleSource s:

clicks
    .onBackpressureDrop()
    .flatMapSingle(::handleClick, false, 1)

В этом случае flatMapSingle подписывается на эти Single последовательно, поэтому это не меняет семантику, которую я получил от concatMapSingle.

...