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

RxJava,只有在第一个为空时才执行observable

如何解决《RxJava,只有在第一个为空时才执行observable》经验,为你挑选了1个好方法。

仅当具有相同电子邮件的用户不存在时,我才想将新用户插入到我的数据库中.

因此,我有两个Observable:第一个使用特定电子邮件发出用户或完成而不发出任何内容.第二个Observable插入一个新用户并返回这个新创建的用户的Object.

我的问题是,我不希望第一个Observable(如果存在)所传递的用户被传输到订阅服务器.相反,我想将它映射到null).

Observable observable = 
    checkAndReturnExistingUserObservable
        .map(existingUser -> null)
        .firstOrDefault(
            insertAndReturnNewUserObservable
                .map(insertedUser -> mMapper.map(insertedUser)
        )

这是我尝试的最后一件事,但它在第二个地图操作员处说"循环推理".

总结一下.我想只在第一个完成空的情况下执行第二个Observable,但如果不是我不想首先返回数据,而不想返回null.

任何帮助都非常感谢.



1> akarnokd..:

有这种switchIfEmpty操作的操作员:

checkAndReturnExistingUserObservable
.switchIfEmpty(insertAndReturnNewUserObservable)

编辑

如果您不需要现有用户,则会有一个基于flatMap的答案,它将第一个检查转换为布尔值,并根据其值进行调度:

checkAndReturnExistingUserObservable
.map(v -> true).firstOrDefault(false)
.flatMap(exists -> exists ? Observable.empty() : insertAndReturnNewUserObservable);

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