2017-11-29 23 views
10

Tôi hơi bối rối bởi nhà điều hành pipe so với chỉ chuỗi map. Cả hai ví dụ dưới đây có tương đương về mặt chức năng không? Mục đích hoặc lợi thế của chức năng ống là gì?Trong Angular rxjs khi nào tôi nên sử dụng `pipe` vs` map`

const name = ajax 
    .getJSON<{ name: string }>("/api/employees/alice") 
    .pipe(
    retry(3, 1000), 
    map(employee => employee.name), 
    catchError(error => of(null)) 
); 

const name = ajax 
    .getJSON<{ name: string }>("/api/employees/alice") 
    .let(retry(3, 1000)) 
    .map(employee => employee.name) 
    .catch(error => Rx.Observable.of(null)); 

Trả lời

18

Các "mới" bằng cách nào, sử dụng pipe, được gọi là nhà khai thác LettablePipeable Operators. Cách "cũ", nơi bạn khai thác chuỗi, được gọi là sử dụng "toán tử vá".

Bắt đầu từ phiên bản 5.5, chúng tôi đã gửi "nhà khai thác đường ống", có thể truy cập được theo số rxjs/operators (thông báo "toán tử" số nhiều). Đây có thể là một cách tiếp cận tốt hơn để kéo chỉ các toán tử mà bạn cần so với các toán tử "vá" được tìm thấy trong rxjs/add/operator/*.

Có một số problems with the patch operators. Họ cũng có thể đảm bảo rằng gói sản xuất của bạn từ mã của bạn nhỏ hơn. Ngoài ra còn có những ưu điểm khác, xem số documentation có khả năng hiển thị khá tốt.

Để trả lời câu hỏi khác của bạn mặc dù 2 mẫu mã của bạn có chức năng tương đương. Ngoài ra, bạn nên sử dụng các toán tử Pipeable trên các toán tử Patch bất cứ khi nào có thể.


Từ documentation (cho đầy đủ)

Vấn đề với các nhà khai thác vá cho dot-chaining là:

  1. Bất kỳ thư viện mà nhập khẩu một nhà điều hành bản vá sẽ tăng thêm Observable.prototype cho tất cả người tiêu dùng của thư viện đó, tạo ra sự phụ thuộc mù quáng. Nếu thư viện loại bỏ việc sử dụng của họ, họ vô tình phá vỡ mọi người khác. Với pipeables, bạn phải nhập các toán tử mà bạn cần vào từng tệp bạn sử dụng.
  2. Các toán tử được vá trực tiếp lên mẫu thử nghiệm không phải là "có thể lay chuyển cây" bằng các công cụ như rollup hoặc webpack. Các nhà khai thác đường ống sẽ là vì chúng chỉ là các hàm được lấy trực tiếp từ các mô-đun.
  3. Các toán tử không được sử dụng đang được nhập trong ứng dụng không thể được phát hiện một cách đáng tin cậy bởi bất kỳ loại quy tắc công cụ hoặc lint xây dựng nào. Điều đó có nghĩa là bạn có thể nhập scan, nhưng ngừng sử dụng và nó vẫn đang được thêm vào gói đầu ra của bạn. Với các nhà khai thác đường ống, nếu bạn không sử dụng nó, một quy tắc lint có thể chọn nó cho bạn.
  4. Thành phần chức năng thật tuyệt vời. Xây dựng các toán tử tùy chỉnh của riêng bạn trở nên dễ dàng hơn nhiều, và bây giờ chúng hoạt động và trông giống như tất cả các toán tử khác từ rxjs. Bạn không cần phải mở rộng Có thể quan sát hoặc ghi đè lift nữa.
+0

Nó được gọi là [nhà khai thác đường ống] (https://github.com/ReactiveX/rxjs/blob/master/doc/lettable-operators.md). – estus

+0

@estus - thực sự, họ đã thay đổi thuật ngữ vào ngày 12 tháng 1. – Igor

Các vấn đề liên quan