在Observable.defer()创建的Observable上重试()会触发一个新的Observable吗?

时间:2016-09-03 15:39:11

标签: java rx-java reactivex

private Observable<String> serverResponsesStream() {
    return Observable.defer(() -> Observable.combineLatest(
            ComSocketFactory.createObservable(), // generates new Observable<ComSocket> instance
            getMessageStream(),
            (comSocket, msg) -> {
                try {
                    final String serverResponse = comSocket.transfer(msg);
                    if (serverResponse == null) {
                        throw new IOException("Server response is null.");
                    }
                    return serverResponse;
                } catch (IOException e) {
                    throw OnErrorThrowable.from(e);
                }
            }));
}


// ...

    serverResponsesStream()
            .retry()
            .subscribe(// do something);

我是否理解正确,因为我使用defer()使用retry()订阅了一个Observeable,我的ComSocketFactory会生成一个新的Observable<ComSocket>实例?

1 个答案:

答案 0 :(得分:4)

根据文件

  

返回一个Observable,它调用一个Observable工厂为每个订阅的新Observer创建一个Observable。

Observable.retry()重新订阅Observable,所以是的 - 你从ComSocketFactory.createObservable()得到了新的Observable。