Skip to content

Instantly share code, notes, and snippets.

@inamiy
Last active October 11, 2024 13:35
Show Gist options
  • Save inamiy/4b134fa8f345d12421273f153007da03 to your computer and use it in GitHub Desktop.
Save inamiy/4b134fa8f345d12421273f153007da03 to your computer and use it in GitHub Desktop.
`RxSwift.flatMap` + inner `AsyncStream` (lazy run) issue
import RxSwift
let subject = PublishSubject<Int>()
let flatMapped = subject
.flatMap {
// Choose one:
// 1. Observable<Int>.just($0)
// 2. Observable<Int>.just($0).values.asObservable()
Observable<Int>.just($0).values.asObservable()
}
let task = Task<[Int], any Error> {
var arr = [Int]()
for try await x in flatMapped.values {
arr.append(x)
}
return arr
}
await Task.yield() // Run `task`.
let arr1 = Array(0 ... 10)
for i in arr1 {
subject.onNext(i)
}
subject.onCompleted()
let arr2 = try await task.value
print("===> arr2", arr2)
print("===> arr2 == arr1", arr2 == arr1)
// ===> arr2 [0, 3, 1, 7, 5, 6, 10, 8, 4, 9, 2]
// ===> arr2 == arr1 false
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment