2016-07-28 22 views
9

Trong TypeScript, điểm khác biệt chính giữa any[]Observable<any[])> là gì?
Các khuyết điểm và thuận lợi của việc sử dụng từng cái là gì?Sự khác biệt giữa một mảng và một mảng có thể quan sát là gì?

+0

Vâng, tôi nghĩ rằng nó phải làm gì nếu một mảng được quan sát hay không:). [Các mảng quan sát có thể đáp ứng với một sự thay đổi về số lượng các mục trong bộ sưu tập (mảng)] (http: //www.charlesnurse .com/Blog/Post/445/Nó-sa-Knockout-7-Thêm-mục-to-và-Loại bỏ-mục-từ-Quan sát-Mảng) – Michelangelo

+0

Quan sát là đối tượng với bất kỳ [] làm mẫu, bất kỳ [ ] chỉ là bất kỳ loại mảng nào – YOU

Trả lời

6

Quan sát được sử dụng để triển khai mẫu Observer. Bạn có thể đăng ký Observable này và bạn nhận được asynchrounous nhận thấy khi các Observable phát ra dữ liệu.

Observable<any[]) là một mảng các Đài quan sát.

Mảng chỉ là một đối tượng, có thể chứa nhiều hơn một giá trị tại một thời điểm.

Đối tượng quan sát thể hiện bộ sưu tập dựa trên đẩy.

Quan sát và quan sát giao diện cung cấp cơ chế tổng quát cho thông báo dựa trên đẩy, còn được gọi là thiết kế quan sát mẫu. Đối tượng Observable thể hiện đối tượng gửi thông báo (nhà cung cấp); đối tượng Observer đại diện cho lớp nhận được chúng (người quan sát).

Take a look at the rxjs docs

vs

Mảng là những đối tượng danh sách giống như có nguyên mẫu có phương pháp để thực hiện các hoạt động traversal và đột biến. Không có độ dài của một mảng JavaScript cũng như các loại phần tử của nó được cố định.

MDN - Arrays

+0

Một mảng không phải là một "biến", mặc dù nó có thể được gán cho một. Đó là một loại giá trị cụ thể. –

+0

Có, mô tả này là một chút không chính xác. Tôi cập nhật câu trả lời của mình. – muetzerich

+0

Có thể quan sát một mảng các quan sát được, hoặc một mảng * có thể quan sát được * hay * một mảng trong một quan sát *? – Spikeh

2

Đối với một tổng quan tuyệt vời của các loại khác nhau của các giá trị trong không gian và thời gian, cả hai ít và số nhiều, xem A General Theory of Reactivity.

Mảng là không thể lặp lại. Nói cách khác, nó có thể lặp lại (một danh sách những thứ) tồn tại ở một điểm trong không gian, và bạn có thể, và muốn, tiêu thụ ngay bây giờ.

Có thể quan sát được là tạm thời có thể lặp lại. Nói cách khác, đó là một danh sách những thứ trải ra theo thời gian, mà bạn tiêu thụ từng cái một.

Để lấy một ví dụ cụ thể, chúng ta hãy cùng tìm hiểu làm thế nào để lặp qua mỗi một trong các loại danh sách:

Mảng:

const array: Array<number> = [1, 2, 3]; 
array.forEach(elt => console.log(elt)); 

Đây là đồng bộ và sẽ thực hiện ngay bây giờ.

Quan sát:

const observable: Observable<number> = Observable.from([1, 2, 3]); 
observable.subscribe(elt => console.log(elt)); 

Đây là không đồng bộ, và sẽ thực hiện một yếu tố tại một thời điểm, khi họ đi vào.

Tuy nhiên, bạn đã đặt câu hỏi hơi khác nhau, là sự khác biệt giữa mảng và mảng quan sát (để rõ ràng, chúng ta nên tránh gọi "mảng quan sát" được) hiểu sai nghĩa là "mảng quan sát", đó là một điều khác, mặc dù chắc chắn hữu ích).

Sự khác biệt là, như tôi đã đề cập, một mảng chỉ là một danh sách giá trị duy nhất tại một thời điểm duy nhất. Một mảng quan sát được là một luồng của mảng, mỗi mảng "đánh dấu" sẽ sinh ra toàn bộ mảng mới, khác nhau.

Vì vậy, hãy sử dụng mảng nếu bạn chỉ muốn danh sách các mục đang ngồi ở đó. Tất nhiên bạn có thể biến đổi hoặc biến đổi mảng, nhưng điều đó không thay đổi thực tế là tại bất kỳ điểm nào trong thời gian chỉ có một mảng duy nhất.

Sử dụng khung quan sát nếu bạn định tiếp tục nhận phiên bản mới của mảng - các phiên bản khác nhau tại các thời điểm khác nhau - và bạn muốn "đẩy" từng phiên bản mới ra các phần khác nhau của chương trình, trong thuật ngữ quan sát được sẽ "đăng ký" để quan sát được, và được thông báo mỗi khi nó được cập nhật.

Để trả lời câu hỏi của bạn thì:

sự khác biệt chính giữa any[]Observable<any[])> là gì?

Một là một mảng và một là mảng quan sát (luồng).

Điểm yếu và ưu điểm của việc sử dụng chúng là gì?

Ưu và khuyết điểm là nếu bạn muốn một mảng, bạn nên sử dụng mảng. Nếu bạn muốn một mảng quan sát được, thì bạn nên sử dụng một mảng quan sát được. Xin lưu ý rằng mặc dù câu hỏi của bạn đề cập đến TypeScript, các khái niệm về mảng và các quan sát, bao gồm các quan sát về mảng, về bản chất là độc lập về ngôn ngữ.

+0

4 downvotes? WTH? Tôi không chắc liệu câu trả lời này có tốt hay không, bởi vì câu hỏi là khủng khiếp, nhưng chắc chắn không phải là xấu. – Bergi

+1

@Bergi Các downvotes đến từ một phiên bản trước đó, snarky của câu trả lời, xem lịch sử chỉnh sửa. –

+0

@torazaburo Cảm ơn câu trả lời của bạn. – eg16

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