RxJava:如何等待以前的订阅初始化值?

Kai*_*ain 7 android rx-java

我有一个初始化为网络调用的类变量.

类似getter的方法负责在初始化时返回值,或者如果网络调用尚未返回则等待初始化值.

如何使用RxJava实现这一点?

另一个解决方案是,我可以简单地创建一个新的网络调用,而不是等待,而不是初始化值,如下所示:

private String value;

public Observable<String> getValue() {
    if (value != null) {
        return Observable.just(value);
    }

    return getValueRemotely();
}

private Observable<String> getValueRemotely() {
    ...
}
Run Code Online (Sandbox Code Playgroud)

但我想避免多次网络通话.

任何的想法 ?

tyn*_*ynn 5

这实际上是一个很好的用例AsyncSubject.

private AsyncSubject<String> value = AsyncSubject.create();

public Observable<String> getValue() {
    value.asObservable();
}
Run Code Online (Sandbox Code Playgroud)

而在getValueRemotely()你要保证在通话onNext()onComplete()value.

value.onNext(valueString);
value.onCommpleted();
Run Code Online (Sandbox Code Playgroud)

AsyncSubject只有完成后,一个observable才会发出一个项目.