【问题标题】:Performing side effects on Publisher在 Publisher 上执行副作用
【发布时间】:2023-03-11 05:23:01
【问题描述】:

我正在尝试对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 中有一些东西我可以使用并获得结果?

【问题讨论】:

    标签: ios swift combine frp


    【解决方案1】:

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

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

    【讨论】:

      最近更新 更多