RxAndroid:可以对 api 请求数组使用 zip 函数,有间隔或延迟吗?
RxAndroid: Possible to use zip function on an array of api requests with interval or delay?
我正在玩 RxAndroid。我有一个 Observables 列表,所有这些都是 api 请求(使用 Retrofit)。我想每隔 x 秒或毫秒触发其中一个,然后将响应压缩在一起。我似乎一旦订阅 Observable.zip(requests, someFunction) 所有这些都会立即被解雇。有什么建议吗?
谢谢!
编辑:似乎向每个请求添加 delaySubscription 可能是答案
您正在寻找 delay()
或 delaySubscription()
。
delay()
将延迟 Observable 的 result 被发布给订阅者。
delaySubscription()
将延迟 对 Observable 的订阅。
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);
现在,另一个 Observable
每(例如)30 毫秒发射一次:
Observable<Long> interval = Observable.interval(30, TimeUnit.MILLISECONDS);
因此,通过 zip()
运算符,您可以将两者结合起来以实现 number
数组中值的周期性发射:
Observable.zip(values, interval, (arrayElement, aLong) -> arrayElement)
.subscribe(arrayElement -> doSomething(arrayElement));
我用它来获得进度指示器的动画效果。我写了一个完整的示例项目,您可以查看 github。
我正在玩 RxAndroid。我有一个 Observables 列表,所有这些都是 api 请求(使用 Retrofit)。我想每隔 x 秒或毫秒触发其中一个,然后将响应压缩在一起。我似乎一旦订阅 Observable.zip(requests, someFunction) 所有这些都会立即被解雇。有什么建议吗?
谢谢!
编辑:似乎向每个请求添加 delaySubscription 可能是答案
您正在寻找 delay()
或 delaySubscription()
。
delay()
将延迟 Observable 的 result 被发布给订阅者。
delaySubscription()
将延迟 对 Observable 的订阅。
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);
现在,另一个 Observable
每(例如)30 毫秒发射一次:
Observable<Long> interval = Observable.interval(30, TimeUnit.MILLISECONDS);
因此,通过 zip()
运算符,您可以将两者结合起来以实现 number
数组中值的周期性发射:
Observable.zip(values, interval, (arrayElement, aLong) -> arrayElement)
.subscribe(arrayElement -> doSomething(arrayElement));
我用它来获得进度指示器的动画效果。我写了一个完整的示例项目,您可以查看 github。