Array和Observable Array有什么区别?

时间:2016-07-28 19:29:35

标签: javascript arrays typescript observable

在TypeScript中,any[]Observable<any[])>之间的主要区别是什么? 使用它们的缺点和优点是什么?

2 个答案:

答案 0 :(得分:9)

Observable用于实现Observer模式。您可以订阅此Observable,并在Observable发出数据时发现异步。

Observable<any[]) Obervable ,其中包含一个数组。在这种情况下,数组可以包含任何类型,因为它是由任何键入的。

数组只是一个对象,一次可以容纳多个值。

  

Observable对象表示基于推送的集合。

     

Observer和Observable接口提供了一种通用机制   用于基于推送的通知,也称为观察者设计   图案。 Observable对象表示发送的对象   通知(提供者); Observer对象代表类   接收它们(观察者)。

Take a look at the rxjs docs

VS

  

数组是类似列表的对象,其原型具有执行遍历和变异操作的方法。无论是JavaScript数组的长度还是其元素的类型都没有固定。

MDN - Arrays

答案 1 :(得分:3)

要全面了解跨时空的各种类型的值,包括单数和复数,请参阅A General Theory of Reactivity

数组是空间可迭代。换句话说,它是一个可迭代的(事物列表),它存在于空间的某个点上,您现在可以并且想要消耗它。

可观察是时间可迭代。换句话说,它是随着时间的推移而展开的一系列事物,你逐一消费。

举一个具体的例子,让我们研究如何迭代这些类型的列表:

<强>阵列

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

这是同步,现在就会执行。

<强>可观察

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

这是异步,并且会一次执行一个元素。

但是,您提出了一个稍微不同的问题,即数组和可观察数组之间的区别(为了清楚起见,我们应该避免调用&#34;数组可观察的&#34;,因为这可能被误解为一个&#34;可观察的数组&#34;,这是一个不同的东西,虽然肯定是有用的。)

不同之处在于,正如我所提到的,数组在单个时间点只是一个值列表。一个可观察的数组是一个的数组,每个&#34; tick&#34;产生一个完整的,新的,不同的阵列。

因此,如果您只想要一个位于那里的项目列表,请使用数组。当然你可以改变或改变数组,但这并没有改变在任何给定时间点只有一个数组的事实。

如果您打算继续获得阵列的新版本 - 在不同时间点使用不同版本 - 并且您希望&#34;推送&#34;使用可观察的数组。每个新版本都出现在你的程序的不同部分,在可观察的术语中将会&#34;订阅&#34;对于可观察的,并在每次更新时得到通知。

回答你的问题:

  

any[]Observable<any[])>之间的主要区别是什么?

一个是数组,另一个是数组的可观察(流)。

  

使用它们的缺点和优点是什么?

优点和缺点是,如果你想要一个数组,你应该使用一个数组。如果你想要一个可观察的数组,那么你应该使用一个可观察的数组。

请注意,尽管您的问题涉及TypeScript,但数组和可观察数据的概念(包括数组的可观察数据)基本上与语言无关。