代码之家  ›  专栏  ›  技术社区  ›  Chad Schultz

如何在RxJava流的中间有条件地添加异步操作?

  •  1
  • Chad Schultz  · 技术社区  · 7 年前

    makeServerCall()
                    .doOnNext {
                        doStuff(it)
                    }
                    //TODO: if it == 0, call asyncOperation() and wait for its callback to fire 
                    //before running the rest of the stream. Otherwise immediately run the rest
                    //of the stream
                    .flatMap {
                        observable1(it)
                        observable2(it)
                        Observable.merge(
                                getSpotSearchObservable(observable1),
                                getSpotSearchObservable(observable2)
                    }
                    .subscribeBy(onNext = {
                    allDone()
                        view?
                    })
    

    我该怎么挤电话给 asyncOperation()

    1 回复  |  直到 7 年前
        1
  •  3
  •   akarnokd    7 年前

    平面地图!

    .flatMap {
        if (it == 0) {
            return@flatMap asyncOperation()
                .ignoreElements()
                .andThen(Observable.just(0))
        }
        return@flatMap Observable.just(it)
    }
    .flatMap {
        observable1(it)
        observable2(it)
        Observable.merge(
            getSpotSearchObservable(observable1),
            getSpotSearchObservable(observable2)
        )
    }