【发布时间】:2018-11-29 20:33:39
【问题描述】:
我正在使用 RxJava 和 Retrofit 来使用不同的端点。我正在使用几个微服务,它们都使用 RxJava 和 Retrofit 来使用其他服务。
我没有使用 Observables 的经验,因此我正在查看 Internet 上的一些示例以了解如何使用它并自己创建一些服务。我看到总是使用方法 subscribe() 。像这样的:
@Setter
@Getter
private MovieDetail movieDetail;
public Observable<Movies> observe() {
allMoviesClientRetrofit
.getMovies()
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.computation())
.subscribe(new Observer<Movies>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable throwable) {
}
@Override
public void onNext(Movies movies) {
allMovies = movies;
});
在我的工作服务中,我到处搜索,从未使用过 subscribe(),但一切正常。这怎么可能?
如您所见,在该示例中,我需要返回一个 Observable 以使我的个人代码与我的工作保持一致,但是如果我使用 subscribe() 方法,它会返回一个 Subscription 对象,这不起作用.
这是我工作代码的一部分,您可以在其中看到 subscribe() 从未被调用,但它可以工作
@GetMapping(
value = "/something",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE
)
public Single<ResponseEntity<Something>> getSomething() {
return retrieveSomethingFactory
.observe()
.toSingle()
.map(something -> {
return ResponseEntity
.status(httpStatus)
.body(something);
});
class retrieveSomethingFactoryImpl implements retrieveSomethingFactory
@Override
public Observable<Something> observe() {
return Observable
.defer(() -> {
Observable<Something1> something1 = retrieveSomething1Factory
.call(link) // Retrofit call
.observe()
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.computation());
Observable<Something2> something2 = retrieveSomething1Factory
.call(link) // Retrofit call
.observe()
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.computation());
return Observable
.zip(something1, something2.toList(), (something1, something2) -> {
....
....
....
return something;
});
谢谢
【问题讨论】: