2017-01-31 5 views
0

Я вижу некоторые вопросы/ответы, связанные с Rx Subscriptions/Observers, но они могут быть для более старых версий Rx, а также не для RxJS, которые могут соответствовать другому API.Разница между подпиской RxJS5 и наблюдателем

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

Наблюдатель: http://reactivex.io/rxjs/manual/overview.html#observer

Подписка: http://reactivex.io/rxjs/manual/overview.html#subscription

что щеколда разница? Может ли кто-нибудь привести пример с практической разницей между этими двумя?

ответ

1

Наблюдатель является потребителем ценностей, поставляемых наблюдаемым.

Таким образом, в основном наблюдатель получает значения, испускаемые потоком.

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

Подписка в основном только «факт» что некий наблюдатель в данный момент получает данные, при отмене подписки на подписку, и поток, и наблюдатель будет по-прежнему существуют, они просто не подключены больше.


В реальном мире метафора смешиваться с псевдо-кодом: газета

поток: Это было бы производство цепи газеты (involing издательской компании создание контента и типография печати бумага)

const newsPaper$ = Observable.interval(DAILY) 
    .switchMapTo(date => publishingCompany.createContent(date)) 
    .switchMapTo(content => printingHouse.printPaper(content)) 
    .publish() 
    .refCount(); 

Observer: Это будет читатель/получатель, который парень с халатом, который каждое утро берет газету в своем переднем дворе, чтобы прочитать ее.

const bathrobeGuy = { 
    next: newsPaper => readPaper(newsPaper), 
    error: errorMsg => complainAbout(errorMsg), // the bathrobe guy will be so angry, the he unsubscribes the paper 
    complete:() => subscribeToDifferentNewsPaper() 
} 

Подписка: Это газетная подписка - доставки мальчик бросает газету в каждый передний двор каждое утро.

// this will activate the "delivery boy" 
const paperSubscription = newsPaper$.subscribe(bathrobeGuy); 

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

paperSubscription.unsubscribe(); 
1

наблюдатель является объектом с набором обратных вызовов, которые выполняются при подписке на наблюдаемом. Другими словами, когда вы вызываете subscribe, вы передаете объект типа Observer. Даже когда вы только передаете обратный вызов, внутренняя rxjs создает Observer с вашим обратным вызовом как свойство next. Другие свойства: error и complete.

Подписка является return тип вызова subscribe, и его единственная цель состоит в том, чтобы быть в состоянии назвать subscription.unsubscribe() для того, чтобы не слушать эту подписку больше. Функции Observer (далее, ошибка, полная) больше не будут вызываться.

var myObserver = { 
    next: (val) => {}, 
    error: (err) => {}, 
    complete:() => {} 
}; 

var mySubscription: Subscription = myObservable.subscribe(myObserver); 

// then, if later you want to unsubscribe: 

mySubscription.unsubscribe()