对 Publisher 执行副作用
Performing side effects on Publisher
我正在尝试对 Publisher
执行副作用,但找不到任何允许我执行此类操作的运算符。准确地说,我正在寻找类似于 RxSwift 的 do(on:)
.
的概念
这就是我正在尝试做的事情。
我正在为第 3 方 SDK 提供的委托编写反应式包装器。它和用于与 BLE 设备交互的 SDK。我有 startScanning
和 stopScanning
之类的方法,我想要实现的是对信号做出反应并调用 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
,该错误仍会沿着管道向下流动! (无论如何完成都会顺流而下,我想你是阻止不了的。)
我正在尝试对 Publisher
执行副作用,但找不到任何允许我执行此类操作的运算符。准确地说,我正在寻找类似于 RxSwift 的 do(on:)
.
这就是我正在尝试做的事情。
我正在为第 3 方 SDK 提供的委托编写反应式包装器。它和用于与 BLE 设备交互的 SDK。我有 startScanning
和 stopScanning
之类的方法,我想要实现的是对信号做出反应并调用 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
,该错误仍会沿着管道向下流动! (无论如何完成都会顺流而下,我想你是阻止不了的。)