RxJava 1.2.6使用一种方法的结果按顺序调用另外两种方法

时间:2017-10-23 19:05:11

标签: rx-java

我目前有getTeams,它返回一个teamIds数组。要致电getTeams,我必须致电authbus.getAuth()获取凭据。这是代码:

public Observable<WebResponse<Team>> getTeams() {
    return authbus.getAuth().take(1).flatMap((UserInfo info) ->
            webApi.getTeams("Bearer " + info.getTokenSet().getAccessToken())
    );
}

但现在我需要取getTeams的结果并调用getTeam并传入第一个TeamId。问题是我需要将身份验证令牌传递到getTeam,就像我对getTeams所做的那样。如何将来自getTeam的{​​{1}}和来自getAuth的teamId的getTeams链接起来?

有关背景信息,API正在幕后更改。旧的API通过调用getTeam返回了我需要的所有团队数据,但是新API在两次调用之间分配 - getTeams以获得一组团队,然后调用getTeam(teamId)来获取团队的细节。现在我们只会从getTeams获得一个团队,所以我想在一个地方自动调用getTeam(teamId),这样我就不必在代码中更新几个不同的地方了。接下来,他们将更新UI以循环每个团队并为每个团队调用getTeam(teamId)。这将需要相当大的应用更改,因此此时可以更改代码以便为每个团队调用getTeam

这是我编写它的尝试,它不能编译:

public Observable<WebResponse<Team>> getTeams() {
    return authbus.getAuth().take(1).flatMap((UserInfo info) ->
        webApi.getTeams("Bearer " + info.getTokenSet().getAccessToken()).take(1).flatMap((Teams teams) ->
                 webApi.getTeam(info.getTokenSet().getAccessToken(), teams.getTeamIds()[0])
        ));
    }

编辑:这是第二次尝试。它抱怨“无法推断功能界面类型”

public Observable<WebResponse<Team>> getTeam() {
        return authbus.getAuth().take(1).flatMap((UserInfo info) ->
                webApi.getTeams("Bearer " + info.getTokenSet().getAccessToken()).take(1).<Teams>flatMap((Teams teams) ->
                        webApi.getTeam(info.getTokenSet().getAccessToken(), teams.getTeamIds()[0])
                ));
}

0 个答案:

没有答案