[英]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.