gpt4 book ai didi

android - 根据发出的项目重复/重新订阅 Observable

转载 作者:行者123 更新时间:2023-12-02 01:18:21 24 4
gpt4 key购买 nike

我有 enum - 将由 Observable 发出的值:

public enum BleGattOperationState {
SUCCESSFUL,
ERROR,
NOT_INITIATED
}

public Observable<BleGattOperationState> readRssi() {
return Observable.<BleGattOperationState>create(subscriber -> {
if (someCondition()) {
subscriber.onNext(BleGattOperationState.SUCCESSFUL);
} else {
subscriber.onNext(BleGattOperationState.NOT_INITIATED);
}
});
}

如果发出了 NOT_INITIATED 值,是否有办法重新订阅或重复可观察对象?基本上是这样的:

readRssi()
.repeatIf(state -> state == NOT_INITIATED)
.subscribe();

我知道运算符 repeatWhen,它不允许对发出的项目进行评估,而 retryWhen 仅在发出错误时起作用。

最佳答案

使用 flatMap - 下面不会无限循环等待预期值。向下滚动以找到支持循环的解决方案。

public static void main(String[] args) {
Observable<String> o1 = Observable.just("1");
Observable<String> o2 = Observable.just("2");

Observable<String> o = System.currentTimeMillis() % 10 < 5 ? o1 : o2; // randomizer

o.flatMap(s -> {
if ("1".equals(s)) {
return o2;
} else {
return Observable.just(s);
}
}).subscribe(next -> System.out.println(next));
}

循环直到我们得到期望值。

public static void main(String[] args) {
Observable<String> o = getRandom(); // randomizer
resolve(o).subscribe(next -> System.out.println(next));
}

static Observable<String> resolve(Observable<String> o){
return o.flatMap(s -> {
System.out.println("---"+s);
if ("1".equals(s)) {
return resolve(getRandom());
} else {
return Observable.just(s);
}
});
}


static Observable<String> getRandom(){
Observable<String> o1 = Observable.just("1");
Observable<String> o2 = Observable.just("2");
long t = System.currentTimeMillis();
System.out.println("getRandom: "+(t%10 < 8 ? 1 : 2));
return t % 10 < 8 ? o1 : o2;
}

关于android - 根据发出的项目重复/重新订阅 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41546087/

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