2016-04-03 7 views
0

Я использую RxJava в моем проекте, и у меня есть ситуация, когда 2 метода вызывается один за другим, и оба возвращают пустоту. Каждый из этих методов внутренне использует RxJava.RxJava: Вызов нескольких несвязанных методов последовательно

Псевдо:

void sendMsg_1() { 
... 
//Fetch data from DB using RxJava to send message to client. 
.. 
} 

void sendMsg_2() { 
... 
Uses RxJava to send message to client. 
.. 
} 

Призывая код:

sendMsg_1(); 
sendMsg_2(); 

Практически sendMsg_2 быстрее и клиент получает его перед sendMsg_1 посылает его Сообщ. Это не хорошо для меня, и я хотел бы, чтобы вывод Msg1 отправлялся до Msg2.

Как это сделать?

Должен ли я искусственно вернуть манекен наблюдаемого только так я могу использовать .flatMap следующим образом:

sendMsg_1() 
.flatMap(msgObj-> { 
    return sendMsg_2(); 
}).subscribe(); 

есть лучший способ?

Спасибо!

ответ

0

Это правильный путь, чтобы излучать недействительные методы образом rxJava в:

public rx.Completable func_A() { 
    return Completable.create(subscriber -> { 
     // func_A logic 
     if(ok) subscriber.onCompleted(); 
     else subscriber.onError(throwable); 
    }); 
} 

func_A() 
.doOnCompleted(() -> func_B()) 
.subscribe(); 

Если это помогает любому ... наслаждаться :-)

+0

только проблемой в том, что вы не получите уведомление о завершении func_B. – njzk2

+0

Что значит? Какое уведомление? – Shvalb

+0

Вы были правы! - он работает не так, как ожидалось! – Shvalb

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