【发布时间】:2019-05-27 09:55:52
【问题描述】:
在 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));
}
它们有什么区别?
【问题讨论】:
-
不是肯定的,但
throttleLast可能会以固定的时间间隔运行,并且throttleLatest会在项目到达时重置超时。也就是说,fixed rate和fixed delay的区别。 -
它在 javadoc 中:throttleLatest “如果在此超时阶段没有从上游发出任何项目,则立即发出下一个上游项目,并且超时窗口从那时开始。”。 ThrottleLast 以固定速率发射,如果没有项目,则不发射任何内容。