2016-07-28 4 views
9

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

+0

Ну, я думаю, что это связано с тем, наблюдается ли массив или нет:). [Наблюдаемые массивы могут реагировать на изменение количества элементов в коллекции (массиве)] (http: //www.charlesnurse .com/Blog/Post/445/It-sa-Knockout-7-Adding-items-to-and-Removing-items-from-Observable-Arrays) – Michelangelo

+0

Observable - это объект с любым шаблоном [], любым [ ] - это просто массив любого типа – YOU

ответ

6

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

Observable<any[]) представляет собой массив наблюдений.

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

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

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

Take a look at the rxjs docs

против

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

MDN - Arrays

+0

Массив не является «переменной», хотя ему может быть присвоен один. Это особый тип ценности. –

+0

Да, это описание было немного неточным. Я обновляю свой ответ. – muetzerich

+0

Is Observable массив наблюдаемых или массив * как наблюдаемый * или * массив в наблюдаемом *? – Spikeh

2

За большой обзор различных типов значений в пространстве и времени, как единственного и множественного числа, см 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)); 

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

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

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

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

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

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

Какова главная разница между any[] и Observable<any[])>?

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

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

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

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

+0

4 downvotes? WTH? Я не уверен, хорошо ли этот ответ, потому что вопрос ужасен, но, конечно, это не так уж плохо. – Bergi

+1

@Bergi. Головорез был получен из более ранней, неряшливой версии ответа, см. Историю изменений. –

+0

@torazaburo Спасибо за ваш ответ. – eg16

Смежные вопросы