gpt4 book ai didi

angular - Rx.ReplaySubject 订阅回调未被调用

转载 作者:太空狗 更新时间:2023-10-29 19:29:39 25 4
gpt4 key购买 nike

我有一个 rxjs ReplaySubject,它会根据我所处的环境发出一个值或 null。意思是如果在某个环境中我进行服务调用并获取数据。如果我不在那个环境中,我只是在重播主题上调用 next(null)。如果进行了服务调用,在我订阅的组件中一切正常。如果我做了 next(null) 那么我的回调永远不会被触发。

我的假设是不会返回 null 值,因为它是在我订阅之前设置的,但我认为这就是 ReplaySubject 的全部意义所在。然后我用谷歌搜索,直到用尽不同的方式来解释这个问题,我得到的只是 ReplaySubject 的自述文件。希望有人能告诉我我做错了什么。我想也许是因为我传入了 null,所以我传入了“Hello”,但仍然没有。这是一个代码示例:

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无关。我记不清了,但它正在发生,所以情况从来都不是真的。这使代码无法执行。

最佳答案

在任何 Observable 上使用 .next(null) 都是正确的。在 RxJS 中一切都是值,包括 nullundefined。所以问题可能出在其他地方。

这就是您现在正在做的事情,并且在这两种情况下(当您取消注释第二个 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));

查看现场演示:https://jsbin.com/cigocak/edit?js,console

关于angular - Rx.ReplaySubject 订阅回调未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42747998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com