我有一个rxjs ReplaySubject,它会根据我所处的环境发出一个值或为null。这意味着如果在某个环境中我进行服务调用并获取数据。如果我不在那个环境中,我只需在重播主题上调用next(null)。在我订阅的组件中,如果进行了服务调用,则一切正常。如果我做了next(null)那么我的回调永远不会被触发。
我的假设是不会返回null值,因为它是在我订阅之前设置的,但我认为这是ReplaySubject的全部内容。我用谷歌搜索,直到我用不同的方式来解释这个问题,我得到的是ReplaySubject的read me文件。希望有人能告诉我我做错了什么。我想也许是因为我传入了null所以我传入了“你好”,但仍然没有。这是一个代码示例:
public Data = new ReplaySubject<any>(1);
init(){
if(!window.Something){
//subscribe callback is never fired in this case.
this.Data.next(null);
}else{
this.http.get(...).map(...{
//this works
this.Data.next(result);
});
}}
我犯的错误实际上与Rx无关。我不记得确切,但它正在制造,所以条件从来都不是真的。这使代码无法执行。
答案 0 :(得分:1)
在任何Observable上使用.next(null)
都是正确的。 RxJS中的所有内容都包含null
和undefined
。所以问题可能在其他地方而不是这个。
这就是你现在正在做的事情,在这两种情况下(当你取消注释第二个if
时)它都能正常工作。该值存储在ReplaySubject
中,然后重放或直接推送到当前观察者:
let subject = new ReplaySubject(1);
// if (!window.document) {
if (!window.whatever) {
subject.next(null);
} else {
setTimeout(() => {
subject.next('Hello');
}, 500);
}
subject.subscribe(val => console.log(val));