首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何连锁观察?

如何连锁观察?
EN

Stack Overflow用户
提问于 2020-07-04 19:47:36
回答 1查看 74关注 0票数 0

我需要连锁两个可观察到的,第二个取决于第一个。所以我要说的是

可观察的1 ->请愿书返回可观察的

代码语言:javascript
复制
//kotlin
fun getTvShow(): Observable<TvShow> {
    return retrofitPetitionGetShow()...
}
//java
Observable<TvShow> getTvShow(){
    return retrofitPetitionGetShow()...
}

可观测的2 ->返回Single

代码语言:javascript
复制
Observable.range(1, TvShow.totalSeasons)
            .flatMap { seasonNumber: Int ->
                retrofitPetitionGetSeason(seasonNumber)....
            }.toList()  

我需要的是添加到TvShow对象TvShow.setList(List<Season>)中的第二个可观察的结果(列表),然后返回它。

提前谢谢你

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-05 08:17:29

根据注释中提供的信息,您可以尝试使用以下代码(这是Java代码,但应该很容易将其转换为Kotlin):

代码语言:javascript
复制
private Observable<TvShow> getTvShow() {
    return retrofitPetitionGetShow();
}

private Single<List<Season>> getSeasons(TvShow tvShow) {
    return Observable.range(1, tvShow.getTotalSeasons())
            .flatMap(seasonNumber -> retrofitPetitionGetSeason(seasonNumber))
            .toList();
}

public Observable<TvShow> chainObservables() {
    return getTvShow()
            .flatMap(tvShow -> getSeasons(tvShow).map(tvShow::withSeasons).toObservable());
}

重要!

以反应性/功能的方式,您不应该修改对象,而应该创建新的对象(在您的示例中,有一个带有季节列表的tvShow更新)。有一个以这种方式实现的tvShow::withSeasons方法引用:

代码语言:javascript
复制
public TvShow withSeasons(List<Season> seasons) {
        return this.seasons == seasons ? this : new TvShow(this.name, this.totalSeasons, seasons);
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62733730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档