对 Publisher 执行副作用

Performing side effects on Publisher

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

的概念

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

newDeviceFoundPublisher
            .timeout(.seconds(timeout), scheduler: DispatchQueue.global())
            .eraseToAnyPublisher()

我想要实现的是:

newDeviceFoundPublisher
            .timeout(.seconds(timeout), scheduler: DispatchQueue.global())
            .doOnError {
                manager.stopScanning()
            }
            .doOnComplete {
                manager.stopScanning()
            }
            .eraseToAnyPublisher()

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

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

请注意,如果您不 catch,该错误仍会沿着管道向下流动! (无论如何完成都会顺流而下,我想你是阻止不了的。)