RXSwift在其他可观察的结果之后的一个可观察的第一个元素

时间:2016-10-28 16:26:07

标签: rx-swift

我在重新开始的世界里很新,现在我遇到了一个问题:

我有两个返回observables的函数:

func connect() -> Observable<Connection>

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

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

我认为我要做的是在execute返回的{obstable}的map函数内运行connect函数,如下所示:

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返回Observable<Result>,我会收到Observable<Observable<Result>>

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

而不是map,请尝试使用flatMapflatMap允许您将之前的结果链接到另一个Observable,而map更多地是对值的直接转换(例如,将Observable<A>转换为Observable<B>

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