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