如何避免嵌套订阅

我的

我有此方法deleteFeedTable()返回一个Completable,当它完成时,我想开始另一个Disposable

我所做的是将using运算符结合使用concatWith,但这会导致嵌套订阅,因此我想避免这种情况。

disposables.add(
                localDataSource.deleteFeedTable()
                        .doOnComplete(() -> {                                preferencesManager.setFeedTableUpdateState(false);
                        })
                        .concatWith(new Completable() {
                            @Override
                            protected void subscribeActual(CompletableObserver s) {   
                             s.onSubscribe(localDataSource.getLastStoredId()
                                        .flatMap(lastStoredId -> remoteDataSource.getFeed(lastStoredId))
                                        .doOnNext(feedItemList -> localDataSource.saveFeed(feedItemList))
                                        .map(feedItemList -> {
                                            Timber.i("MESA STO MAP");
                                            List<Feed> feedList = new ArrayList<>();
                                            for (FeedItem feedItem : feedItemList) {
                                                feedList.add(mapper.from(feedItem));
                                            }
                                            downloadImageUseCase.downloadPhotos(feedList);
                                            return feedList;
                                        })
                                        .subscribe());
                            }
                        })
                        .subscribeOn(schedulerProvider.io())
                        .observeOn(schedulerProvider.mainThread())
                        .subscribe(() -> {}, throwable -> Log.i("THROW", "loadData ", throwable)));

有没有办法可以避免嵌套订阅?还是有另一种方法将其添加到一次性变量中,以便以后可以清除订阅?

阿卡诺克德

用途andThen

disposables.add(
    localDataSource.deleteFeedTable()
        .doOnComplete(() -> {
            preferencesManager.setFeedTableUpdateState(false);
        })
        .andThen(
            localDataSource.getLastStoredId()
                .flatMap(lastStoredId -> remoteDataSource.getFeed(lastStoredId))
                .doOnNext(feedItemList -> localDataSource.saveFeed(feedItemList))
                .map(feedItemList -> {
                    Timber.i("MESA STO MAP");
                    List<Feed> feedList = new ArrayList<>();
                    for (FeedItem feedItem : feedItemList) {
                        feedList.add(mapper.from(feedItem));
                    }
                    downloadImageUseCase.downloadPhotos(feedList);
                    return feedList;
                })
        )
        .subscribeOn(schedulerProvider.io())
        .observeOn(schedulerProvider.mainThread())
        .subscribe(() -> {}, throwable -> Log.i("THROW", "loadData ", throwable)));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章