微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

一次组合可选的可观察物

如何解决一次组合可选的可观察物

我正在使用在Android设备上运行的RxJava。我有2个PublishSubjects,它们定期发布通过调用OnNext()从蓝牙特性接收的数据(字符串)。一个特征(A)确实存在,另一个(B)可能存在或不存在。我正在尝试从其中一个或两个中获取数据,并使用它们来做出一些决策。连接到蓝牙设备后以及第一次从这些特征接收数据时,我只想运行一次。

我真的很难使它正常工作。我可以使用CombineLatest()或zip()合并可观察对象,并使用take()定义超时,但是我的逻辑似乎总是被调用两次。

例如

Observable.combineLatest(A,B.take(2,TimeUnit.SECONDS).defaultIfEmpty(""),(a,b) -> {
    //combine logic
    return aAndMaybeB;
}.observeOn(AndroidSchedulers.mainThread()).firstOrError().subscribe( aAndMaybeB-> {
    //make some decisions
});

A.firstOrError().zipwith(B.take(2,TimeUnit.SECONDS).first(""),b) -> {
    //combine logic
    return aAndMaybeB;
}.observeOn(AndroidSchedulers.mainThread()).subscribe( aAndMaybeB-> {
    //make some decisions
});

为什么组合逻辑和/或做出一些决策两次被调用?我怎么只能让它发生一次?

有很多线程详细介绍了如何组合可选的可观察对象,但我发现没有一个对象只讨论一次操作

Optional Observables in combineLatest

RxJava: combine two optional observables

RxJava: how to handle combineLatest() when one of the streams emits nothing

RxJava combine Observable with another optional Observable with timeout

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。