对Observable.defer()创建的Observable执行retry()会触发一个新的Observable吗?


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()的结果将是我的ComSocketFactory生成一个新的Observable<ComSocket>实例?

根据docs

返回一个可观察对象,它调用一个可观察对象工厂,为每个订阅的新观察者创建一个可观察对象。

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

最新更新