gpt4 book ai didi

java - RxJava 将 Observable 与另一个可选的具有超时功能的 Observable 结合起来

转载 作者:行者123 更新时间:2023-11-30 06:56:11 27 4
gpt4 key购买 nike

假设我们有两个可观察值 ABA肯定会发布结果,而结果来自B可能根本不会发布(超时)。

问题是如何映射 A 的结果和B如果B在一个时间范围内返回,否则只返回 A 的结果.

Observable<DatabaseObject> A = getDatabaseElement();
Observable<NetworkObject> B = restApi.getElement();

map 示例:

map((databaseObject, networkObject) => {
databaseObject.setData(networkObject);
return databaseObject;
})

最佳答案

为了使 B 可观察对象超时,请使用带有时间参数的 take 运算符:

B.take(10, TimeUnit.SECONDS)

为了接收 AB(如果 B 在超时内准备好),请使用 concatWith:

A.concatWith(B.take(10, TimeUnit.SECONDS))
.takeLast(1)

如果您希望组合 AB(可以选择用 B 丰富 A):

A.concatWith(B.take(10, TimeUnit.SECONDS))
.reduce((a, b) -> a.setData(b))

如果 AB 属于不同类型(可以选择用 B 丰富 A):

Observable.combineLatest(
A,
B.take(10, TimeUnit.SECONDS).defaultIfEmpty(stubB)),
(a, b) -> { if (b != stubB) a.setData(b); }
)

关于java - RxJava 将 Observable 与另一个可选的具有超时功能的 Observable 结合起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41762526/

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