rxjs:-接收订阅前发出的值 [英] rxjs: - receive values emitted before subscribe

查看:115
本文介绍了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 "!"

解决方案

使用BehaviorSubjectReplaySubject代替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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆