When using ignoreOutput() to ignore all outputs from upstream publisher receiveRequest closure calls twice. Can anyone explain why does it happen?
Example:
let numSubject = PassthroughSubject<Int, Never>()
let timer = Timer.scheduledTimer(withTimeInterval: 2, repeats: true) { _ in
numSubject.send((1 ... 5).randomElement()!)
}
let cancellable = numSubject.eraseToAnyPublisher()
.handleEvents(
receiveSubscription: { subscription in
print("receiveSubscription")
}, receiveOutput: { _ in
print("receiveOutput")
}, receiveCompletion: { completion in
print("receiveCompletion")
}, receiveCancel: {
print("receiveCancel")
}, receiveRequest: { request in
print("receiveRequest \(request)")
})
.ignoreOutput()
.sink(receiveCompletion: {print("completion: \($0)")},
receiveValue: {print("value \($0)")})
Output:
receiveSubscription
receiveRequest unlimited
receiveRequest unlimited
receiveOutput
receiveOutput
...
If using example from docs everything is good:
let numbers = [1, 2, 3]
let cancellable = numbers.publisher
.handleEvents(
receiveSubscription: { subscription in
print("receiveSubscription")
}, receiveOutput: { _ in
print("receiveOutput")
}, receiveCompletion: { completion in
print("receiveCompletion")
}, receiveCancel: {
print("receiveCancel")
}, receiveRequest: { request in
print("receiveRequest \(request)")
})
.ignoreOutput()
.sink(receiveCompletion: {print("completion: \($0)")},
receiveValue: {print("value \($0)")})
Output:
receiveSubscription
receiveRequest unlimited
receiveOutput
receiveOutput
receiveOutput
receiveCompletion
completion: finished