繁体   English   中英

数组和可观察数组有什么区别?

[英]What is the difference between an Array and an Observable Array?

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

Observables 用于实现观察者模式。 你可以订阅这个 Observable 并且当 Observable 发出数据时你会得到异步通知。

Observable<any[])是包含数组的Observable 在这种情况下,数组可以包含任何类型,因为它是由any类型化的。

数组只是一个对象,一次可以保存多个值。

Observable 对象代表一个基于推送的集合。

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

查看 rxjs 文档

对比

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

MDN - 数组

有关跨空间和时间的各种类型的值(单数和复数)的精彩概述,请参阅反应性一般理论

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

一个 observable 是一个时间 iterable 换句话说,它是一个随着时间的推移而展开的事物列表,您可以一一消费。

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

数组

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));

这是异步的,并且将在它们进来时一次执行一个元素。

但是,您问了一个稍微不同的问题,即数组和可观察的数组之间的区别(为了清楚起见,我们应该避免调用“可观察数组”,因为这可能会被误解为表示“数组” observables”,这是另一回事,尽管肯定有用)。

不同之处在于,正如我所提到的,数组只是单个时间点的单个值列表。 一个可观察的数组是一个数组,每个“滴答”产生一个完整的、新的、不同的数组。

因此,如果您只想要一个项目列表,请使用数组。 当然,您可以改变或转换数组,但这不会改变在任何给定时间点只有一个数组的事实。

如果您打算继续获得数组的新版本——在不同时间点的不同版本——并且您想将每个新版本“推送”到程序的不同部分,请使用可观察的数组,这在可观察术语中将“订阅”可观察对象,并在每次更新时收到通知。

然后回答你的问题:

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM