使用Single.zip的并行api请求未处理错误

时间:2018-07-24 12:14:36

标签: rx-java2

我想从两个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());
  1. 订阅后,如果两个api请求均失败(例如没有互联网连接的情况),则不会处理错误信号之一(即使onError被调用),导致应用崩溃。但是,如果我使用Observable <>而不是Single <>,则将处理错误并且不会引发异常。我的实现有问题吗?

  2. 如果我不为个人可观察到的调用subscribeOn(Schedulers.io),而是仅调用压缩的,则不会引发异常。但是AFAIK,在这种情况下api请求不是并行的。

1 个答案:

答案 0 :(得分:0)

我们在使用 Completable.mergeArray() 时遇到了完全相同的问题,我们花了数年时间才弄清楚这一点。总之,崩溃是由并行运行的流并同时抛出错误引起的。

我们写了一份详尽的 blog post series 来描述问题和我们的解决方法。我想如果你看一看肯定会有所帮助。如果您有任何问题,请在评论中告诉我。