首页 > 解决方案 > 在另一个订阅触发后开始订阅

问题描述

有两个可观察对象:ab。我想b在第一个 observable ( a) 触发后订阅第二个 observable ( ) (即生成了第一个onNext事件)。

我试过了

    b.skipUntil(a).subscribe(onNext:{
        print("B: \($0)")
    }).disposed(by: _bag)

但没有运气,因为b是冷的可观察的。据我了解,它会立即启动并被skipUntil(a).

这种方法似乎有效:

    a.subscribe(onNext:{_ in
        // ... handle a ...

        b.subscribe(onNext:{
            print("B: \($0)")
        }).disposed(by: self._bag)
    }).disposed(by: _bag)

但我意识到这是一种不好的做法,而不是一条路要走。

标签: rx-swift

解决方案


这是一个简单的flatMap

let c = a.flatMap { _  in b }

您可能想.take(1)在 flatMap 之前添加一个,或者查看不同种类的 flatMap 并查看哪个适合您的用例。最好b在 flatMap 闭包中生成 observable,而不是像上面那样传递它。

https://medium.com/@danielt1263/rxswifts-many-faces-of-flatmap-5764e6c2018c


推荐阅读