![](/img/trans.png)
[英]In RxJava, how to reflect/extract a failure outside of an Observable?
[英]RxJava: How to extract object from observable?
我觉得这是一个愚蠢的问题,但我暂时找不到任何答案,所以我会问它,对不起:)
所以,我需要一个执行以下功能的函数:
1)调用另一个函数来创建一个Observable User
2)从Observable User获取User对象
3)获取有关用户的一些信息并运行一些逻辑
4)返回可观察用户
我在步骤#2遇到了麻烦。 我怎么做? 或者,这种方法在某种程度上是根本错误的吗?
这是函数的“模型”:
@Override protected Observable buildUseCaseObservable(){
Observable<User> userObservable = userRepository.findUserByUsername(username);
//User user = ??????
//if (...) {...}
return userObservable;
}
谢谢 :)
您可以使用运算符(map,flatMap,doOnNext等)通过管道获取您的observable包装的对象
Observable.just("hello world")
.map(sentence-> sentence.toUpperCase) --> do whatever you need.
.subscribe(sentence -> println(sentence)
按照设计Observable遵循Observer模式,该模式订阅了observable并通过管道发出一次接收项。
另外你可以做的是使用观察者模式,只需使用toBlocking从管道中提取对象。 但这是一种反模式,意味着你没有应用好的设计。
@Test
public void observableEvolveAndReturnToStringValue() {
assertTrue(Observable.just(10)
.map(String::valueOf)
.toBlocking()
.single()
.equals("10"));
}
你可以在这里看到更多关于阻止的例子https://github.com/politrons/reactive/blob/master/src/test/java/rx/observables/utils/ObservableToBlocking.java
你无法从一个可观察者中“提取”某些东西。 当您订阅它们时,您可以从observable获取项目(如果它们发出任何内容)。 由于您要返回的对象是Observable类型,因此您可以应用运算符将数据转换为链接。 RxJava中最常见且易于使用的运算符是“map”,它通过应用函数将一种形式的数据更改为其他形式。
在您的情况下,您可以直接在Observable<user>
上使用'map'运算符:
return userRepository.findUserByUsername(username)
.map(new Func1<User, Object>() {
@Override
public Object call(User u) {
// ..
// apply your logic here
// ..
return myDataObject; // return you data here to subcribers
}
});
我希望您了解RxJava的基础知识,并且不需要任何有关如何使用运算符的介绍。 对于地图文档,请点击此链接
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.