我想从两个api并行获取数据。
Single<TodayDataEntry> todayDataEntrySingle = openWeatherApi.getTodayData(
"London,uk", FetchDataUtil.API_KEY).subscribeOn(Schedulers.io());
Single<ListWrapper<ForecastDataEntry>> forecastDataEntrySingle = openWeatherApi.getForecastData(
"London,uk", FetchDataUtil.API_KEY).subscribeOn(Schedulers.io());
Single<DataAll> observable = Single.zip(
todayDataEntrySingle,
forecastDataEntrySingle,(t1, t2) -> {
return new DataAll(t2.getList(), t1);
}).subscribeOn(Schedulers.io());
订阅后,如果两个api请求均失败(例如没有互联网连接的情况),则不会处理错误信号之一(即使onError被调用),导致应用崩溃。但是,如果我使用Observable <>而不是Single <>,则将处理错误并且不会引发异常。我的实现有问题吗?
如果我不为个人可观察到的调用subscribeOn(Schedulers.io),而是仅调用压缩的,则不会引发异常。但是AFAIK,在这种情况下api请求不是并行的。
答案 0 :(得分:0)
我们在使用 Completable.mergeArray()
时遇到了完全相同的问题,我们花了数年时间才弄清楚这一点。总之,崩溃是由并行运行的流并同时抛出错误引起的。
我们写了一份详尽的 blog post series 来描述问题和我们的解决方法。我想如果你看一看肯定会有所帮助。如果您有任何问题,请在评论中告诉我。