当前位置:  开发笔记 > 编程语言 > 正文

RxJava Android链接了许多不同类型的请求

如何解决《RxJavaAndroid链接了许多不同类型的请求》经验,为你挑选了1个好方法。

我对Observable.zip函数有点"estetic"问题.你这样使用它:

Observerbale.zip(
    reqA, reqB, reqC,
    (a, b, c) -> {/*deal with them*/});

请求数量等于"处理它"功能中的参数数量.现在,如果你有更多的请求,比如6,你将最终得到函数,它需要6个参数(假设它们都有不同的类型).它只是感觉不干净.有没有办法将它们包装在一个类中,例如属性?

我现在的真实问题是,我使用zip来加载设置数据:

Observable.zip(
    loadAPIMenus(),                        //1.
    databaseService.readFavorites(),       //2.
    (menuResponse, favorites) -> loadFavorites(menuResponse, favorites)) //3.
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(
        menus -> menuSubscriber.onNext(menus), //4.
        error -> menuSubscriber.onError(error));

    从rest api加载列表视图的项目

    加载这些项目的ID,这些项目在db中存储为收藏夹

    合并两个列表,因此最喜欢的项目是isFavorite>设置为true

    更新列表视图

现在不是那么糟糕.但我想在#3处增加2-3个对其他数据结束函数的请求将增长到具有太多函数参数的4行猛犸象.

我想,我可以使用Observable.zip嵌套在另一个中,但可能很危险.有没有更优雅的方式来包裹这些参数?

我很高兴看到你的建议.



1> drhr..:

在文档中Observable::zip(),它指出:

"你可以将Observables压缩在一起,将其压缩为2到9个单独的参数,或者作为单个参数:可观察的可观察对象或发出可观察对象的观察者(如上图所示). "

这打开了使用某种形式的大门Iterable>,或者Observable>代替Observable你现在使用的2-9 秒之间的重载.

使用这种方法,zip现在也变为最后一个参数FuncN,使用参数列表Object... args作为参数调用,您可以将其视为数组.

如果您使用该Observable::zip(Iterable, FuncN)方法,您可以:

List> list = new ArrayList<>();
list.add(req1);
list.add(req2);

Observable.zip(list, new FuncN() {
    @Override
    public ??? call(Object... args) {
        return ???;
    }
);

我不打扰Observable>你的情况,因为这需要你创建一个可观察的列表或数组,以便首先传递给Observable::from()它,尽管可能有更好的方法来做到这一点.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有