2017-08-01 3 views
0

私のemit.next(1)が失われました。私の購読者は、すでに発行が完了した後でないと購読できません。rxjs: - サブスクライブ前に発行された値を受け取ります

この答えはRxJs: how to get values emitted before we subscribe?しかし、私はそれが働いて取得する方法がわからなかったのパブリッシュおよび接続示唆:

console.log('make emit') 
let emit = new Subject<number>(); 
console.log('make obs') 
let obs = emit.asObservable() 
console.log('emit 1') 
emit.next(1) 
console.log('subscribe') 
obs.subscribe((v)=>console.log(v,'!')) 
console.log('emit 2') 
emit.next(2) 
console.log('set timeout 1000 to emit') 
setTimeout(()=>emit.next(3),1000) 
console.log('done') 

出力:

make emit 
main.bundle.js:1561 make obs 
main.bundle.js:1563 emit 1 
main.bundle.js:1565 subscribe 
main.bundle.js:1567 emit 2 
main.bundle.js:1566 2 "!" 
main.bundle.js:1569 set timeout 1000 to emit 
main.bundle.js:1571 done 
main.bundle.js:1566 3 "!" 

それは1 "!"

+3

私はあなたが 'ReplaySubject'を使うことができると思います... – martin

答えて

6

使用BehaviorSubjectを記録しなければなりませんか、 Subjectの代わりにReplaySubjectまたはプレーンObservableの代わりに新しいサブスクライバは最後に放出されたイベントを最初の値として取得します。

関連する問題