我正在玩RxAndroid。我有一个可观察量列表,所有这些都是 api 请求(使用改造)。我想每x秒或毫秒触发其中一个,然后将响应压缩在一起。 我似乎一旦我订阅了 Observable.zip(请求,someFunction),它们都会立即被触发。有什么提示吗?
谢谢!
编辑:看起来为每个请求添加延迟订阅可能是答案
您正在寻找delay()
或delaySubscription()
。
delay()
将延迟将可观察量发布给订阅者的结果。 delaySubscription()
将延迟对可观察对象的订阅。
Observable.zip(someObservable.delaySubscription(100, TimeUnit.MILLISECONDS),
someOtherObservable.delaySubscription(200, TimeUnit.MILLISECONDS),
someThirdObservable.delaySubscription(300, TimeUnit.MILLISECONDS),
new Func3<Object, Object, Object, Void>() {
...
}).subscribe();
此外,还可以使用 interval()
运算符实现定期发送效果。
让我们看一个简单的例子。假设你有一个数组,numbers
,其值必须每 x 次发出一次。您可以创建一个发出它们的Observable
:
Observable<Integer> values = Observable.from(numbers);
现在,另一个发出每个(例如)30毫秒的Observable
:
Observable<Long> interval = Observable.interval(30, TimeUnit.MILLISECONDS);
因此,通过 zip()
运算符,您可以将两者结合起来以实现number
数组中值的周期性发射:
Observable.zip(values, interval, (arrayElement, aLong) -> arrayElement)
.subscribe(arrayElement -> doSomething(arrayElement));
我用它来获得进度指示器的动画效果。我写了一个完整的示例项目,你可以在github中签入。