When I run the following code in the Playground (I'm on XCode 13.4):
import Combine
import Foundation
import _Concurrency
let subject = CurrentValueSubject<Int, Never>(0)
let faultyPublisher = Publishers.CombineLatest(subject, Just(-1))
.filter { firstValue, _ in firstValue != 0 }
let publisherToTest = faultyPublisher
Task {
for await output in publisherToTest.values {
print("RECEIVED \(output)")
}
}
Task {
try await Task.sleep(nanoseconds: 1_000_000_000)
subject.send(1)
}
I expect to see the output: RECEIVED (1, -1).
Instead I see no output. Is this a bug with Publishers.CombineLatest + .filter + values: AsyncPublisher?
Some other note: if you assign publisherToTest to one of these, the behaviours are what I would expect:
let workingPublisher1 = Publishers.CombineLatest(subject, Just(-1))
.filter { firstValue, _ in firstValue != 1 }
Above outputs: RECEIVED (0, -1)
let workingPublisher2 = Publishers.CombineLatest(Just(-1), subject)
.filter { _, secondValue in secondValue != 0 }
Above outputs: RECEIVED (-1, 1)
let workingPublisher3 = Publishers.CombineLatest(subject, Just(-1))
.filter { firstValue, _ in firstValue != 0 }
.flatMap(maxPublishers: .max(2)) { Just($0) }
Above outputs: RECEIVED (1, -1)