Наблюдаемый <T>возвращающий тип T после вызова метода subscribe () - PullRequest
0 голосов
/ 28 ноября 2018

Я имею дело с Observables, и у меня есть 2 вопроса относительно этого кода: - В основном, я пытаюсь получить объект MovieDetail, но я не могу сделать это после использования метода subscribe ().Это мой код:

public MovieDetail getMovieDetail() {
    Observable<MovieDetail> movieDetail = movieDetailService.observe(); // Call method (1)
    movieDetail.subscribe();

    First question:
    // What I need to return here is an object MovieDetail 
    // movieDetail is an Observable<MovieDetail> 
    // So I'd need something like: movieDetail.someMethod() to return an object MovieDetail, but not sure which one I must use

    Second question: 
    // Is it correct to call movieDetail.subscribe(); here or it should be called inside Method (1), something like this:
       movieDetailServiceClientRetrofit
            .getMovieDetails("550")
            .subscribeOn(Schedulers.io())
            .observeOn(Schedulers.computation())
            .map(movie -> movie.getDetails()) // Return MovieDetail
            .toObservable()
            .subscribe();
}    


// Method (1)
public Observable<MovieDetail> observe() {

    return movieDetailServiceClientRetrofit
            .getMovieDetails("550")
            .subscribeOn(Schedulers.io())
            .observeOn(Schedulers.computation())
            .map(movie -> movie.getDetails()) // Return MovieDetail
            .toObservable()      // Return Observable<MovieDetail>
}

1 Ответ

0 голосов
/ 28 ноября 2018

Возможно, вы боретесь с концепцией хронометража, как, например, в «когда доступны подробности фильма?Observable<MovieDetail> является своего рода обещанием, что в конечном итоге объект MovieDetail может быть испущен.

Если вам нужен объект синхронно, вам придется ждать, пока объект будет излучен.Есть несколько способов сделать это, включая использование вариантов оператора first().Эти операторы будут блокировать, ожидая, когда объект будет испущен, и затем возвращают испущенное значение.

Принудительное выполнение шага может стать дорогим, но вы, возможно, захотите заплатить цену.Синхронная обработка данных намного меньше реактив .

...