Trang chủ

Toán tử

Ghép luồng dữ liệu, và luồng thực thi chạy đi đâu

Toán tử là những publisher bọc quanh publisher khác. map trả về một Publishers.Map, giữ lấy nguồn phía trên và biến đổi từng giá trị đi qua. Chưa có gì chạy cho tới khi có ai đó đăng ký.

let results = searchTerms
    .removeDuplicates()
    .flatMap { term in
        api.search(term)
            .catch { _ in Just([]) }
    }
    .receive(on: DispatchQueue.main)

Ba điều đáng biết về chuỗi này:

  • flatMap giữ mọi publisher con sống cho tới khi chúng kết thúc. Với tìm kiếm gõ tới đâu tra tới đó, điều đó nghĩa là các request chồng lên nhau và kết quả về sai thứ tự; switchToLatest sẽ huỷ cái trước đó.
  • catch kết thúc luồng mà nó cứu. Một khi lỗi đi qua, nguồn phía trên coi như xong — nên phép cứu lỗi được đặt bên trong flatMap, trên publisher con, chứ không phải bên ngoài.
  • receive(on:) chuyển nơi giao giá trị, không chuyển nơi làm việc. api.search làm gì thì vẫn làm ở chỗ cũ; chỉ những giá trị đi qua điểm này mới về luồng chính.

Đây là chương mẫu. Phần nội dung đầy đủ vẫn đang được viết.