首页 > 解决方案 > 从订阅者 Angular 获取数据的问题

问题描述

嗨,我是 angular 新手,正在学习 observable 和 Subject 的概念。我的理解是 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");
           });
   }

标签: angularrxjsobservablesubjectsubject-observer

解决方案


从 RxJS 文档:

在 Observable Execution 中,可能会传递零到无限的 Next 通知。如果发送了错误或完成通知,则之后无法发送任何其他通知。

https://rxjs-dev.firebaseapp.com/guide/observable

这意味着如果你曾经调用过 error() 或 complete(),除非你实现错误处理或重新创建你的 observable,否则你不能再调用 next()。


推荐阅读