在onErrorResumeNext之后没有调用JavaRx doOnNext

时间:2018-02-09 10:35:46

标签: android arrays rx-java rx-android

我试图循环投掷物品并对每件物品进行额外请求。问题是请求返回错误的可能性,但我需要继续请求并收集列表中的所有数据。但看起来在onErrorResumeNext之后没有其他数据添加到列表中。

Observable<List<TestModel2>> observable = apiTest
            .performTest()
            .flatMapIterable(items -> items)
            .flatMap(testModel -> {
                Log.d("TestItemData", "testModel.userId = " + testModel.userId);
                if (testModel.userId < 5) {
                    return apiTest.performTest2(testModel.userId);
                } else {
                    return apiTest.performTest3(testModel.userId);
                }
            })
            .doOnNext(testModel2 -> {Log.d("TestItemData", "doOnNext --- " + testModel2.title);})
            .onErrorResumeNext(throwable ->{
                            Log.d("TestItemData", "onErrorResumeNext -------- ");
                            return Observable.empty();
                         })
            .toList()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread());

在这个例子afret performTest()调用我得到10个项目,我需要循环抛出并调用返回数据的performTest2() 对于我称为performTest3()的一些id,它返回404异常。

a for result in logs我看到所有10个testModel.userId s(从1到10)但doOnNext只有onErrorResumeNext个来电,所以在结果列表中我可以得到1个项目或仅限2或3项

1 个答案:

答案 0 :(得分:2)

doOnNext

中应用onErrorResumeNextflatMap
Observable<List<TestModel2>> observable = apiTest
    .performTest()
    .flatMapIterable(items -> items)
    .flatMap(testModel -> {
        Log.d("TestItemData", "testModel.userId = " + testModel.userId);
        Observable<TestModel2> obs;
        if (testModel.userId < 5) {
            obs = apiTest.performTest2(testModel.userId);
        } else {
            obs apiTest.performTest3(testModel.userId);
        }
        return obs
            .doOnNext(testModel2 -> {
                Log.d("TestItemData", "doOnNext --- " + testModel2.title);
            })
            .onErrorResumeNext(throwable ->{
                Log.d("TestItemData", "onErrorResumeNext -------- ");
                return Observable.empty();
            });
    })
    .toList()
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread());