代码之家  ›  专栏  ›  技术社区  ›  Héctor

io中不存在doOnNext()。反应性X。仅有一个的

  •  4
  • Héctor  · 技术社区  · 8 年前

    我正在将一个应用程序从RxJava 1迁移到2。我有这样一个代码:

    RxJava 1

    public Completable update() {
        return client.fetchNotes()
            .map(toNote())
            .toList()
            .doOnNext(save())
            .toCompletable();
    }
    

    在上述代码中, toList() 返回a Observable<List<Note>> .

    现在,我正在尝试将该代码转换为RxJava 2:

    RxJava 2

    public Completable update() {
        return client.fetchNotes()
            .map(toNote())
            .toList()
            .doOnNext(save()) // <-- compilation error here
            .ignoreElements();
    }
    

    在RxJava 2中, toList() 返回a Single<List<Note>> ,所以我不能锁链 doOnNext(save()) 因为 doOnNext() 中不存在 Single<T>.class .

    如何在这两种情况下获得相同的行为?基本上,在 save() 方法,我正在存储 Note 在数据库中,它必须来自 List<Note> ; Database 我使用的接口不允许逐个存储。这就是为什么我需要使用 toList() :

    interface Database {
        void store(List<Note> notes);
    }
    
    1 回复  |  直到 8 年前
        1
  •  8
  •   Robert Lewis    8 年前

    自a Single 只发射一个项目,没有“下一个”或 doOnNext() 操作人员而是使用 doOnSuccess() .