Какая разница между throttleLatest и throttleLast в rxjava? - PullRequest
2 голосов
/ 27 мая 2019

В Observable есть два метода, называемых throttleLast и throttleLatest.

Мраморные диаграммы похожи, но два внутренних кода отличаются.

public final Observable<T> throttleLast(long intervalDuration, TimeUnit unit) {
    return sample(intervalDuration, unit);
}


public final Observable<T> sample(long period, TimeUnit unit, Scheduler scheduler, boolean emitLast) {
    ObjectHelper.requireNonNull(unit, "unit is null");
    ObjectHelper.requireNonNull(scheduler, "scheduler is null");
    return RxJavaPlugins.onAssembly(new ObservableSampleTimed<T>(this, period, unit, scheduler, emitLast));
}
public final Observable<T> throttleLatest(long timeout, TimeUnit unit, Scheduler scheduler, boolean emitLast) {
    ObjectHelper.requireNonNull(unit, "unit is null");
    ObjectHelper.requireNonNull(scheduler, "scheduler is null");
    return RxJavaPlugins.onAssembly(new ObservableThrottleLatest<T>(this, timeout, unit, scheduler, emitLast));
}

Какая разница между ними?

1 Ответ

2 голосов
/ 28 мая 2019

См. Комментарии @Slaw и @ akarnokd.

Не положительно, но throttleLast может работать через фиксированные промежутки времени, а throttleLatest сбрасывает время ожидания всякий раз, когда поступает элемент.Другими словами, разница между фиксированной скоростью и фиксированной задержкой .

И

Это в javadoc: throttleLatest "Если никакие элементы не были выпущеныиз восходящего потока в течение этой фазы тайм-аута, следующий восходящий элемент испускается немедленно, и с этого момента начинается окно тайм-аута. "ThrottleLast испускает с фиксированной скоростью, и если нет элемента, ничего не генерируется.

Я не очень хорошо понял, поэтому я попытался сравнить себя.

пример кода

sample

...