rxjs:-接收订阅前发出的值 [英] rxjs: - receive values emitted before subscribe
本文介绍了rxjs:-接收订阅前发出的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的emit.next(1)
丢失了,我希望我的订户获得该值.我的订阅者要等到发射发生后才能订阅.
此答案建议发布并连接 RxJs:如何获取订阅之前发出的值是什么?但是我不确定如何使它起作用:
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 "!"
解决方案
使用BehaviorSubject
或ReplaySubject
代替Subject
或普通Observable
,然后新订阅者将获得最后发出的事件作为第一个值. /p>
my emit.next(1)
is lost, I want my subscriber to get that value. My subscriber can't subscribe until after the emit has already happened.
This answer suggests publish and connect RxJs: how to get values emitted before we subscribe? however I wasn't sure how to get it working:
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')
output:
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 "!"
it should log 1 "!"
解决方案
Use BehaviorSubject
or ReplaySubject
instead of Subject
or plain Observable
, then new subscribers will get the last emitted event as first value.
这篇关于rxjs:-接收订阅前发出的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文