2016-05-11 5 views
3

Я использую RxJS 4 для создания горячего Наблюдаемые как описывают в official documentationКак создать Горячие Наблюдаемые в RxJS 5

Но RxJS 5 migration guid не объясняет, как создать Hot Observable.

const source = Observable.create((observer) => { 
    asynCall((data) => { 
    observer.onNext(data) 
    }) 
}) 
const published = source.publish() 
published.connect() 
published.subscribe((data) => { 
    console.log(data) 
}) 

С Rx5 я получил следующее сообщение об ошибке:

Uncaught TypeError: source.publish не является функцией (...)

+0

Как вы включая источник RxJS5? – paulpdaniels

+0

Пожалуйста, укажите plnkr, jsbin или подобное. – rryter

+0

Помогает ли это? [... публикация не является функцией ...] (http://stackoverflow.com/questions/34677947/converting-angular2-http-response-to-connectableobservable) – bloodyKnuckles

ответ

3

Вы можете использовать .publish().refCount() (или .share() в качестве псевдонима)

var source = Rx.Observable.interval(1000) 
    .take(10) 
    .publish().refCount(); 

source.subscribe(item => console.log(`-: ${item}`)); 
setTimeout(() => { 
    source.subscribe(item => console.log(`--: ${item}`)); 
}, 2500); 

http://jsbin.com/cupibitehu/1/edit?js,console

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

регистрирует следующие

"-: 0" 
"-: 1" 
"-: 2" 
"--: 2" 
"-: 3" 
"--: 3" 
"-: 4" 
"--: 4" 
"-: 5" 
"--: 5" 
"-: 6" 
"--: 6" 
"-: 7" 
"--: 7" 
"-: 8" 
"--: 8" 
"-: 9" 
"--: 9" 

http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-share

+0

, если это горячий наблюдаемый, тогда вы не должны нужно позвонить subscribe(), правильно? –

+1

Я не понимаю, почему вы не хотите подписываться на звонки, вам нужно подписаться/forEach для получения результатов. Вышеуказанное устанавливает две подписки, чтобы показать, что отложенная подписка начнется там, где происходят текущие испускания, а не повторение ранее полученных результатов. – subhaze

+0

да, вы правы, я ошибся –