RXJS 主题有 3 种不同类型的提要,就
1) if you miss it you miss it = Subject
2) give me the last value = BehaviorSubject
3) give me all the last values = ReplaySubject
听起来您正在寻找#3,对吗?如果是这样,只需查看 ReplaySubjects。
主题 - 订阅者只会获得订阅后发出的发布值。一个
BehaviorSubject - 最后一个值被缓存。订阅者将在初始订阅时获得最新值。
ReplaySubject - 它可以缓存指定数量的发射。任何订阅者都将在订阅时获得所有缓存的值。
import * as Rx from "rxjs";
const subject = new Rx.ReplaySubject(2, 100);
// subscriber 1
subject.subscribe((data) => {
console.log('Subscriber A:', data);
});
setInterval(() => subject.next(Math.random()), 200);
// subscriber 2
setTimeout(() => {
subject.subscribe((data) => {
console.log('Subscriber B:', data);
});
}, 1000)
我们创建 ReplaySubject 并指定我们只想存储最后 2 个值,但不超过 100 ms 我们开始每 200 ms 发出 Subject 值。订阅者 A 将获取并记录 Subject 发出的每个值。我们从订阅者 B 开始订阅,但我们在 1000 毫秒后才这样做。这意味着在我们开始订阅之前,Subject 已经发出了 5 个值。当我们创建主题时,我们指定要存储最多 2 个值,但不再是 100 毫秒。这意味着在 1000 毫秒后,当订阅者 B 开始订阅时,它只会收到 1 个值,因为主题每 200 毫秒发出一次值。