如何在RxAndroid中将Observable映射到Single?

问题描述

我有Observable<State> state 和这段代码`

Flowable<.> loadData(){
return state.toFlowable(Latest).flatmap(this::fetchData()) }`

其中fetchData()返回Flowable

但是如果我们有fetchData()且返回类型为Single,该怎么办 和loadData()返回Single

如何将Observable映射为Single?

解决方法

您可以使用.take(1)取得第一项,并通过以下方法转换为单项:

  • .single(defaultItem)
  • .singleElement()
  • .singleOrError()
,

这里有一个可行的解决方案:

 loadDataSingle()
            .subscribeBy(
                    onSuccess = { println("This is your single data $it") },onError = { println("We have a problem") }
            )


fun loadDataSingle(): Single<String> {
    return getState().singleOrError()
            .flatMap {
                fetchDataSingle()
            }
}

fun fetchDataSingle(): Single<String> {
    return Single.just("This is fetching your single data")
}

或者您可以执行Single.fromObservable并将调用包装在其中

   fun loadDataSingle(): Single<String> {
    return Single.fromObservable(getState())
            .flatMap { fetchDataSingle() }

   }