Подтвердить что ты не робот

В чем разница между массивом и наблюдаемым массивом?

В TypeScript, в чем основное отличие между any[] и Observable<any[])>?
Каковы минусы и плюсы использования каждого из них?

4b9b3361

Ответ 1

Наблюдаемые используются для реализации шаблона Observer. Вы можете подписаться на этот Observable, и вы получаете асинхронный эффект, когда данные Observable испускают данные.

Observable<any[]) является Obervable, который содержит массив. В этом случае массив может содержать любой тип, так как он набирается любым.

Массив - это только объект, который может содержать более одного значения за раз.

Объект Observable представляет собой коллекцию на основе push.

Интерфейсы Observer и Observable обеспечивают обобщенный механизм push-on-уведомления, также известный как шаблон проектирования наблюдателя. Объект Observable представляет объект, который отправляет уведомления (поставщик); объект Observer представляет класс, который их получает (наблюдатель).

Взгляните на документы rxjs

против

Массивы представляют собой объекты, подобные спискам, у прототипа которых есть методы для выполнения операций обхода и мутации. Исправлена ни длина массива JavaScript, ни типы его элементов.

MDN - массивы

Ответ 2

Для большого обзора различных типов значений в пространстве и времени, как сингулярных, так и множественных, см. "Общая теория реактивности".

Массив является пространственным итерабельным. Другими словами, это итерируемый (список вещей), который существует в одной точке пространства, и который вы можете и хотите использовать сейчас.

Наблюдаемый - временный итерируемый. Другими словами, это список вещей, распространяемых с течением времени, которые вы потребляете один за другим.

Чтобы взять конкретный пример, давайте рассмотрим, как перебирать каждый из этих типов списков:

Массив:

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

Это асинхронно и будет выполнять один элемент за раз, когда они войдут.

Однако вы задали несколько другой вопрос, который представляет собой разницу между массивом и наблюдаемым массивом (что для ясности нам следует избегать вызова "наблюдаемого массива", поскольку это может быть неверно истолковано как значение "массив" наблюдаемых ", что совсем другое, хотя, безусловно, полезно).

Разница в том, что, как я уже упоминал, массив - это всего лишь один список значений за один момент времени. Наблюдаемым массивом является поток массивов, каждый "тик" дает целый, новый, различный массив.

Поэтому используйте массив, если вы просто хотите, чтобы список элементов находился там. Конечно, вы можете мутировать или преобразовывать массив, но это не меняет того факта, что в любой момент времени имеется только один единственный массив.

Используйте наблюдаемые массивы, если вы намерены продолжать получать новые версии массива - разные версии в разные моменты времени - и вы хотите "выталкивать" каждую новую версию в разные части вашей программы, что в наблюдаемой терминологии будет "подписываться" на наблюдаемые и получать уведомление каждый раз, когда он обновляется.

Чтобы ответить на ваш вопрос, тогда:

В чем основное отличие между any[] и Observable<any[])>?

Один - это массив, а другой - наблюдаемый (поток) массивов.

Каковы минусы и плюсы использования каждого из них?

Плюсы и минусы заключаются в том, что если вам нужен массив, вы должны использовать массив. Если вы хотите наблюдать за массивами, вы должны использовать наблюдаемые массивы.

Обратите внимание, что хотя ваш вопрос относится к TypeScript, понятия массивов и наблюдаемых, включая наблюдаемые массивы, по сути, не зависят от языка.