我今天看到一些让我畏缩的代码,但我不知道如何修复它。
本质上,该代码.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 调用中设置全局状态,返回 null,并且实际上并未将 .zip 用于其预期目的。此外,观察者onNext
不使用结果,而是取决于在 .zip 中设置全局状态的副作用。
动机是所有这些 observables 只发出一次(它们是 API 调用),我们希望在缓存返回的值之前等待它们全部完成,然后进入应用程序中的下一个逻辑屏幕。
我不确定如何处理这个电话。我们不能在我们的 Java 版本上使用 lambda,而且我还没有找到一个不长五倍的干净解决方案。