RXSwift 一个可观察对象的第一个元素在另一个可观察对象的结果之后

RXSwift first element of one observable after result of other observable

我是反应世界的新手,现在我遇到了一个问题:

我有两个函数 returns observables:

func connect() -> Observable<Connection>

func execute(_ statement: Statement) -> Observable<Result>

我现在需要做的是,connect 必须在 execute 之前 运行 然后我必须 return execute 的结果...

我想我要做的是 运行 由 connect 编辑的可观察 return 函数的 map 函数内部的 execute 函数,像这样:

public func executeFetch(_ query: Statement) -> Observable<Result> {
    return self.connect()
    .map({ (connection) -> Result in
        return execute(query) // here is my problem because execute returns an Observable<Result>.
    })
}

但是因为 execute return 一个 Observable<Result> 我得到一个 Observable<Observable<Result>>

我该如何解决这个问题?

尝试使用 flatMap 而不是 mapflatMap 允许您将之前的结果链接到另一个 Observable,而 map 更像是值的直接转换(例如,将 Observable<A> 变成 Observable<B>

map 中执行大量同步工作没有错,特别是如果您使用 Scheduler 来确保在适当的线程上完成工作(例如 .subscribeOn(ConcurrentDispatchQueueScheduler(globalConcurrentQueueQOS: .Background)) ), 但是如果你试图将第二个 Observable 编织到你的链中,那么 flatMap 将是惯用的方法。