当前位置: 首页 > 知识库问答 >
问题:

在Retrofit+RxJava中链接请求

纪辰沛
2023-03-14
apiService.A()
    // store in DB here? How? maybe use map()?
    .flatMap(modelA -> {
        // or maybe store modelA in DB here?
        return apiService.B().map(modelB -> {
            storeInDB()l // store B here ?
            return modelB;
        });
    });

如果我没有使用lambda函数,这看起来就像普通的嵌套调用一样难看。这样做更好吗?

共有1个答案

南门烈
2023-03-14

我不认为使用map运算符是存储api调用结果的最佳方法

我喜欢做的是在doonnext运算符中分离这些内容。因此,您的示例如下所示:

apiService.A()
        .doOnNext(modelA -> db.store(modelA))
        .flatMap(modelA -> apiService.B())
        .doOnNext(modelB -> db.store(modelB));

(您自己添加必要的observeonsubscribeon,就像您需要的那样)

 类似资料:
  • 第一个API调用返回一个元素列表,然后我想随后调用另一个API,在第一个API调用的列表的每个元素中返回一个。我(想我)已经得到了它,所以它用列表的每个元素调用第二个应用编程接口调用,但是我不确定如何订阅它来获得第二个调用返回的结果。 改装接口: 我不确定从这里去哪里。 我相信然后使我能够获得可观察的

  • 本文向大家介绍rx-java 设置Retrofit和RxJava,包括了rx-java 设置Retrofit和RxJava的使用技巧和注意事项,需要的朋友参考一下 示例 Retrofit2带有对多种可插入执行机制的支持,其中一种是RxJava。 要与RxJava一起使用改造,首先需要将Retrofit RxJava适配器添加到您的项目中: 那么在构建改造实例时需要添加适配器: 在您定义API的界面

  • 球门 在我的应用程序中,我希望使用改装2上传一些文件到我的网络服务器(一次多个,在这种情况下是图片。)到那个特定的文件。 尝试 我对使用函数式编程范式不熟悉,所以我的理解可能会被误导。我有两个不同的对象,一个文件响应(DTO表示从我的网络服务器上传文件后的响应)和一个照片对象。这个Photo对象有两个字段,并充当在我的后端服务器中持久化的实体。它的字段对应于列,并且单独上传这些对象可以很好地工作。

  • 所以基本上我想做的是,打第一个网络电话。如果调用的RESTful web服务返回1,则进行第二次网络调用。如果web服务返回0,则不要进行第二次网络调用。 这是我的密码 显然,上面的代码是错误的,因为它应该总是返回可观察的。那么,如果第一次网络调用返回0,我的代码应该如何编写?

  • 我正在尝试从使用普通改型迁移到使用RxJava扩展进行改型,以便在后台线程上进行API调用链。 例如,我有一个名为ModelGroup的对象,它有一个ModelPerson对象列表。我的目标是做到以下几点。 将ModelGroup发送到服务器并接收一个响应,它是一个整数,表示新插入的ID,我们称之为newGroupId 对于ModelGroup中的每个ModelPerson,设置Person。gr