在另一个订阅触发后开始订阅

时间:2020-01-09 09:51:07

标签: rx-swift

有两个可观察值:ab。我想在第一个可观察的(b)触发(即生成了第一个a事件)之后订阅第二个可观察的(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)

但是我意识到这是一种不好的做法,不是可行的方法。

1 个答案:

答案 0 :(得分:1)

那是一个简单的flatMap

let c = a.flatMap { _  in b }

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

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