angular - 从订阅者 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");
});
}
解决方案
从 RxJS 文档:
在 Observable Execution 中,可能会传递零到无限的 Next 通知。如果发送了错误或完成通知,则之后无法发送任何其他通知。
https://rxjs-dev.firebaseapp.com/guide/observable
这意味着如果你曾经调用过 error() 或 complete(),除非你实现错误处理或重新创建你的 observable,否则你不能再调用 next()。
推荐阅读
- oauth-2.0 - 如何使用邮递员 GET 请求从 keycloack 获取访问令牌
- windows - Tomcat 9 需要 1 分钟才能停止
- javascript - 如何添加输入验证
- angular - 标头['transformRequest'] = angular.identity
- android - 如何允许用户在 Edittext 中使用 Firebase 使用手机号码或电子邮件 ID 登录
- spring-boot - 是否可以使用 Spring Cloud Stream 进行一次处理?
- c - snprintf 用于组成格式化字符串的用法
- node.js - Nodejs-将正文设置为谷歌云任务队列
- javascript - 用于发生字符串序列的正则表达式是什么?
- php - Laravel:用户和帖子关系