Spot the bug
Results sometimes show an older query. Tap the line that allows it.
$query.debounce(for: .milliseconds(300), scheduler: RunLoop.main).removeDuplicates().flatMap { query in api.searchPublisher(query) } // AnyPublisher<[Item], Never>.receive(on: RunLoop.main).sink { [weak self] items in self?.results = items }.store(in: &cancellables)
Hint 1 of 1
What happens to the previous request when a new query arrives?
Choose an answer, then open Show answer below to check it.
Show answer
- Answer: line 4
.flatMap { query in api.searchPublisher(query) } // AnyPublisher<[Item], Never>
Line 4: flatMap keeps every request alive, so a slow older response can arrive last. Use .map { api.searchPublisher($0) }.switchToLatest() to cancel the previous request.