簡體   English   中英

從訂閱者 Angular 獲取數據時出現問題

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM