Observable.defer() 创建的 Observable 上的 retry() 会触发一个新的 Observable 吗?
Does retry() on an Observable created by Observable.defer() trigger a fresh 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()
订阅 Observerable,使用 retry()
的结果将是我的 ComSocketFactory
生成一个新的 Observable<ComSocket>
实例?
根据文档
Returns an Observable that calls an Observable factory to create an Observable for each new Observer that subscribes.
Observable.retry()
重新订阅 Observable,所以是的 - 你从 ComSocketFactory.createObservable()
获得了新的 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()
订阅 Observerable,使用 retry()
的结果将是我的 ComSocketFactory
生成一个新的 Observable<ComSocket>
实例?
根据文档
Returns an Observable that calls an Observable factory to create an Observable for each new Observer that subscribes.
Observable.retry()
重新订阅 Observable,所以是的 - 你从 ComSocketFactory.createObservable()
获得了新的 Observable。