gpt4 book ai didi

android - 我怎样才能摆脱 RxJava 调用链?

转载 作者:行者123 更新时间:2023-11-29 20:15:02 25 4
gpt4 key购买 nike

我有以下一组 RxJava 运算符:

  currentUser = mApi.getUserById(userToken, userId, userId)
.onErrorReturn(throwable -> null)
.map(userSet -> userSet.getUsers().get(0))
.doOnNext(user -> {
user.setToken(userToken);
})
.toBlocking()
.first();

这里的问题是 doOnNext() 调用和 map() 调用可能对空输入进行操作。我可以在每个调用中检查空输入,并相应地采取行动,但我喜欢做的只是打破操作链并返回一个null currentUser 的值。

如果我以某种方式重构我的 RxJava 操作,这可能吗?

最佳答案

只需将 onErrorReturn 运算符移动到链的末尾,在 toBlocking() 之前。然后在 getUserById 处捕获的异常将通过以下运算符的错误处理传播(因此 mapdoOnNext 不会被执行)直到命中onErrorReturn 并返回 null。

例如,这段代码打印null:

Integer myInt = Observable.<Integer> error(new RuntimeException())
.doOnNext(item -> System.out.println("doOnNextInvoked"))
.onErrorReturn(throwable -> null)
.toBlocking().first();

System.out.println(myInt);

虽然这一个:

Integer myInt = Observable.<Integer> error(new RuntimeException())
.onErrorReturn(throwable -> null)
.doOnNext(item -> System.out.println("doOnNextInvoked"))
.toBlocking().first();

System.out.println(myInt);

打印

doOnNextInvoked
null

所以我们看到 doOnNext 在第二种情况下被调用,而不是第一种情况。

关于android - 我怎样才能摆脱 RxJava 调用链?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34072415/

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