Java 如何在另一个可观察点等待acync可观察点完成

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

我有一些初始化时间很长的类,例如Api。 我的manager类加载Api类异步,代码如下

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();
            }
       });
}