RxAndroid:可以在具有间隔或延迟的api请求数组上使用zip函数



我正在玩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中签入。

相关内容

  • 没有找到相关文章

最新更新