Java 如何在另一个可观察点等待acync可观察点完成
我有一些初始化时间很长的类,例如Api。 我的manager类加载Api类异步,代码如下Java 如何在另一个可观察点等待acync可观察点完成,java,asynchronous,rx-java,reactive-programming,Java,Asynchronous,Rx Java,Reactive Programming,我有一些初始化时间很长的类,例如Api。 我的manager类加载Api类异步,代码如下 class MyManager{ private Observable<Api> apiProvider private Api mApi; MyManager(Observable<Api> apiProvider){ this.apiProvider = apiProvider; apiProvider.subscribe(a
class MyManager{
private Observable<Api> apiProvider
private Api mApi;
MyManager(Observable<Api> apiProvider){
this.apiProvider = apiProvider;
apiProvider.subscribe(api -> mApi = api);
}
}
类MyManager{
私有可观测apiProvider
私有Api mApi;
MyManager(可观察apiProvider){
this.apiProvider=apiProvider;
订阅(api->mApi=api);
}
}
但客户机可以调用MyManager类的方法,该类在创建之前需要Api实例
public Observable<List<Value>> loadVlues() {
return Observable.create(new Observable.OnSubscribe<List<Value>>() {
@Override
public void call(Subscriber<? super List<Value>> subscriber) {
try {
List<Value>> values = mApi.getValues();
subscriber.onNext(values);
} catch (Exception e) {
subscriber.onError(e);
}
}
});
}
public observeble loadVlues(){
返回Observable.create(newobservable.OnSubscribe(){
@凌驾
公共无效呼叫(用户此时不需要阻塞
怎么样
class MyManager {
Observable<Api> apiProvider;
MyManager(Observable<Api> apiProvider){
// cache so can be fetched several times
this.apiProvider = apiProvider.cache();
}
}
类MyManager{
Observable,不是真正的功能,因为它们违背了使用Observable的目的。你能用map运算符显示loadVlues方法的代码吗?@DmitriyP Addedy你的解决方案正在工作!但我还有一个问题,如果api.getValues();返回可观察的?@DmitriyP你能做什么是什么意思?如果你想要可观察的,你可以平面映射它。
class MyManager {
Observable<Api> apiProvider;
MyManager(Observable<Api> apiProvider){
// cache so can be fetched several times
this.apiProvider = apiProvider.cache();
}
}
public Observable<List<Value>> loadValues() {
return
apiProvider.map(new Func1<Api, List<Value>>() {
@Override
public List<Value> call(Api api) {
return api.getValues();
}
});
}