Сегодня я увидел какой-то код, который заставил меня съежиться, но я не был уверен, как это исправить.Что делать с несколькими наблюдаемыми различного типа?
существу код использует .zip
на нескольких звонков в полу-цепь их вместе, а затем действовать на результат:
Observable.zip(service.getObservable1(), service.getObservable2(), service.getObservable3(), new Func3<Type1, Type2, Type3>(){
public Object call(Type1 type1, Type2 type2, Type3 type3){
// set a bunch of globals
mGlobalState.setType1(type1);
mGlobalState.setType2(type2);
mGlobalSession.setType3(type3);
return null;
}
}).subscribe(mObserver);
Так много вещей, кажется неправильным; установив глобальное состояние в .zip-вызов, возвращая нуль и фактически не используя .zip по своему назначению. Кроме того, onNext
наблюдателя не использует результат, но зависит от побочных эффектов установки глобального состояния в .zip.
Мотивация заключается в том, что все эти наблюдаемые только излучают один раз (они являются вызовами API), и мы хотим дождаться их завершения до кэширования возвращаемых значений и затем перейти к следующему логическому экрану в приложении.
Я не уверен, что делать с этим звонком. Мы не можем использовать лямбда на нашей версии Java, и я не нашел чистого решения, которое не в пять раз больше.