gpt4 book ai didi

android - RxJava2 延迟不起作用

转载 作者:行者123 更新时间:2023-11-29 16:46:17 25 4
gpt4 key购买 nike

我有存储库方法:

public Maybe<String> getId(String id){
return mApiInterface.get().getId(id)
.subscribeOn(mSchedulerProvider.io())
.observeOn(mSchedulerProvider.mainThread());
}

我正尝试在循环中延迟使用此方法:

 final ArrayList<String> ids = SharedPreferenceProvider.getIds();

for(final String id:ids) {
mRepository.get().getId(id)
.delay(5, TimeUnit.SECONDS)
.subscribeWith(new DisposableMaybeObserver<String>() {
@Override
public void onSuccess(String s) { }

@Override
public void onError(Throwable e) { }

@Override
public void onComplete() { }
});
}

但是延迟方法不起作用。我究竟做错了什么?有时我需要在两个请求之间进行延迟。

决定的最终变体:

Flowable.zip(Flowable.fromIterable(ids),
Flowable.interval(0, 5, TimeUnit.SECONDS).onBackpressureBuffer(),
new BiFunction<String, Long, String>() {
@Override
public String apply(String s, Long aLong) throws Exception {
return s;
}
}
).flatMapMaybe(new Function<String, MaybeSource<String>>() {
@Override
public MaybeSource<String> apply(String s) throws Exception {
return mRepository.get().testMaybe(s);
}
}).subscribeWith(new DisposableSubscriber<String>() {
@Override
public void onNext(String s) {

}

@Override
public void onError(Throwable t) {

}

@Override
public void onComplete() {

}
});

最佳答案

I need to send request with id every 5 seconds.

But I need - mRepository.get().getId(id1) - wait 5 sec - mRepository.get().getId(id2) - wait 5 sec - etc

您可以使用间隔压缩,然后在存储库调用中使用 flatMap

Flowable.fromArray(ids) // or fromIterable(ids)
.zipWith(
Flowable.interval(0, 5, TimeUnit.SECONDS).onBackpressureBuffer(),
(id, time) -> id
)
.flatMapMaybe(id -> mRepository.get().getId(id), 1)
// .repeat()
.subscribe(/* ... */)

关于android - RxJava2 延迟不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48004547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com