根据我目前对 RxJS 中 ReplaySubject
的理解,下面的代码应该可以工作:
import { ReplaySubject } from 'rxjs/ReplaySubject';
private dataObs = new ReplaySubject(1);
get_posts(value) {
console.log(this.dataObs.observers.length);
if (this.dataObs.observers.length) {
console.log('Going cache');
return this.dataObs;
} else {
console.log('Going live');
return this.http.get(`endpoing here`)
.map((res) => {
this.dataObs.next(res);
console.log(this.dataObs.observers.length);
return res;
});
}
}
但事实并非如此,我不明白这一点。
根据我目前的理解,this.dataObs.next(res)
应该使 this.data.observers.length
为 1
,从而允许第一个 if block 条件通过。但这并没有发生。
我做错了什么?
最佳答案
您的观察者列表为空的原因是因为您的可观察对象没有观察者。
您的 next()
发射不会向观察者列表添加任何值,它只是添加一个要发送给所有观察者的发射。如果您希望您的观察者列表不为空,请订阅您的主题:
this.dataObs.subscribe();
this.dataObs.observers.length != 0; // => true
关于javascript - RxJS ReplaySubject 观察者长度在下一个之后不会增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49245964/