[英]Issue in fetching data from Subscriber Angular
嗨,我是 angular 的新手,正在学习可观察和主题的概念。 我的理解是 observable 是其他代码可以订阅的事件发射器,Subject 既可以订阅也可以发射数据。 我尝试了下面的代码,我检查以毫秒为单位的时间是否均匀,并基于此我发出成功和失败。 基本上我已经创建了一个随机的成功和失败方法。 问题是每当出现错误时,控件就会移动到错误块,但它永远不会打印成功或进入成功块。 我不确定我做错了什么。 如果您可以向我指出任何有助于消除我知识空白的博客或文档,请告诉我。 提前致谢。
test() {
const test_subject = new Subject<any>();
var x = new Date();
console.log(x.getMilliseconds());
if (x.getMilliseconds() % 2) {
//debugger;
test_subject.next(true)
} else {
//debugger;
test_subject.error(false);
}
return test_subject.asObservable();
}
callSubscription() {
this.appService.test().
subscribe(data => {
console.log("success");
}, error => {
console.log("fail");
});
}
来自 RxJS 文档:
在 Observable Execution 中,可能会传递零到无限的 Next 通知。 如果发送了错误或完成通知,则之后无法发送任何其他通知。
https://rxjs-dev.firebaseapp.com/guide/observable
这意味着如果你曾经调用过 error() 或 complete(),除非你实现错误处理或重新创建你的 observable,否则你不能再调用 next()。
您的代码永远不会记录success
,因为您在订阅主题之前调用test_subject.next(true)
。
如果您订阅一个主题,您将只会收到从那时起发布的值,但不会收到任何以前发布的值。 尽管在出错后订阅主题时您仍然会收到错误消息。
要在成功回调中记录发出的值,请在订阅后调用next
或使用 BehaviorSubject 或 ReplaySubject。 请参阅: Angular 中的主题与行为主题与重播主题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.