2016-08-31 4 views
1

Сохранение его простого и короткого, как подписаться на наблюдаемый в методе onNext() другого абонента, чтобы мы могли делать только вложенную подписку, когда текущий наблюдаемый завершает свое выполнение. Обе подписки будут сделаны в отдельных потоках, и требование состоит в том, чтобы первый поток завершил выполнение до начала второго потока.подписывается на наблюдаемый, когда другой наблюдаемый завершает

makeObservable() 
.subscribeOn(Schedulers.newThread()) 
.subscribe(new Subscriber<User> { 
    @override 
    void onNext(User user){ 
    //do something 
    //make another subscription here 
}); 

ответ

1

Не делайте новую подписку, вернуть другой Observable и подписаться на него.

apiCall() 
.subscribeOn(<scheduler>) 
.observeOn(<scheduler>) 
.flatMap(new Func1<User, Observable<Something>() { 
    @Override 
    public Observable<Something> call(User user) { 
     return Observable.just(<example>); 
    } 
}); 

редактировать: при возврате апи вызова, flatMap будет перехватывать поток, и оттуда, либо вернуть Observable или вызвать функцию, которая возвращает Observable (то есть другой апи вызов).

+0

Немного разработка будет полезна –

1

Если они оба излучают одни и те же предметы, используйте Observable.concat(), который подписывается на наблюдаемый N + 1 после наблюдения наблюдаемого N. Но, возможно, стоит описать ваш вариант использования более подробно.

Edit: Вы должны быть в состоянии сделать что-то вроде:

userClient 
.saveUser(user) 
.flatMap(userSaveResult -> 
    userClient 
    .saveUserDetails(userSaveResult.id, seuser.getDetails)) 
.onError(...) 
+1

Я использую переоснащение для возврата наблюдаемых в результате вызова API, а другие наблюдаемым из другой звонок. Первый вызов добавляет некоторые элементы в базу данных, а второй вызов делает некоторые обновления в базе данных. Оба вызова излучают разные элементы (скажем, сначала наблюдаемые испускают «Пользователь», а второй испускают элементы, связанные с «Пользователь», такие как «Пользовательская информация»). Очевидно, что обновления могут быть сделаны только в том случае, если 'User' существует в базе данных, которая испускается первым наблюдаемым. –

+0

Я еще не знаком с lambdas, я был бы признателен, если бы вы напишете его в простом синтаксисе для меня, чтобы сделать его понятным. –

Смежные вопросы