对 Publisher 执行副作用

coj*_*joj 2 frp ios swift combine

我正在尝试对 执行副作用Publisher,但找不到任何允许我执行此类操作的运算符。准确地说,我正在寻找一个类似于 RxSwift 的do(on:).

这就是我想要做的。我正在为 3rd 方 SDK 提供的委托编写一个反应式包装器。它和用于与 BLE 设备交互的 SDK。我有像startScanning和这样的方法,stopScanning我想要实现的是对信号做出反应并stopScanning作为任何错误或完整事件的副作用进行调用。到目前为止,我有这样的事情:

newDeviceFoundPublisher
            .timeout(.seconds(timeout), scheduler: DispatchQueue.global())
            .eraseToAnyPublisher()
Run Code Online (Sandbox Code Playgroud)

我想要实现的是:

newDeviceFoundPublisher
            .timeout(.seconds(timeout), scheduler: DispatchQueue.global())
            .doOnError {
                manager.stopScanning()
            }
            .doOnComplete {
                manager.stopScanning()
            }
            .eraseToAnyPublisher()
Run Code Online (Sandbox Code Playgroud)

是否已经有这样的东西,或者我可能遗漏了一些东西,我可以使用Combine中的某些东西并获得结果?

mat*_*att 11

您可能正在寻找.handleEvents接线员。您可以使用五个不同参数中的任何一个来实现它;它们都是可选的,所以只实现你需要的那些。错误和完成都算作receiveCompletion:.

请注意,如果您不这样做,错误仍然会沿着管道向下流动catch!(无论如何,完成都会沿着管道流下来,我认为你无法阻止它。)