可观察 - 多个订阅者

Posted

技术标签:

【中文标题】可观察 - 多个订阅者【英文标题】:Observable - Multiple Subscibers 【发布时间】:2016-06-26 23:06:59 【问题描述】:

我对 RxJS 和 Observables 非常陌生。我按照本教程进行操作->

https://coryrylan.com/blog/angular-2-observable-data-services

我的问题是,

有:

OnePage:操作并显示答案

服务:保持相同的答案

SecondPage:操作并显示答案

在该链接中,他将数据订阅到组件数据,如下所示

ngOnInit() todosService.todos$.subscribe(updatedTodos => this.componentTodos = updatedTodos); todosService.loadTodos();

这是我的

onPageWillEnter()
    this.service.answers$.subscribe(updatedAnswers => 
        this.answers = updatedAnswers;
        console.log("we subscribed from questions");
    );
    this.service.load().then((rootobject:RootObject) =>
        this.rootobject = rootobject;
        this.questions = rootobject.Item.questions;
        this.current_question = this.service.current_question;
        this.pushNextImage(0);
        console.log(this.answers, " Questions page loaded => then");
    );
    console.log(this.answers, " Questions page loaded");

一切都很酷。我可以按如下方式更新全局“答案”和本地“答案”。

markQuestion(event)
   this.current_question = this.questions[event.q_number];
   this.current_question_number = event.q_number;
   //Mark the answer in answers
   this.answers[event.q_number-1] = event.val;
   this.service._answersObserver.next(this.answers);

在此之后,当我控制台记录“service.answers”时,它也会更新,但是。

在第二页:

onPageWillEnter()
      this.service.answers$.subscribe(updatedAnswers => 
          this.answers = updatedAnswers;
          console.log("we subscribed from questions");
      );
      //this.service._answersObserver.next(this.service.answers);
      console.log(this.service.answers$);
      console.log(this.service.answers," Page loaded AnswerSheet" , this.answers ," => answer_list");
  

它甚至没有进入订阅事件。控制台中没有任何内容..除非我这样做:

this.service._answersObserver.next(this.service.answers);

这是为什么呢?

这里是笨蛋https://plnkr.co/edit/c3fu5hsPZXslLegdeD0p?p=info

【问题讨论】:

【参考方案1】:

如果在AnswerSheetPage类的构造函数中添加this.service.answers$.subscribe,而不是在onPageWillEnter方法中,是否有效?

【讨论】:

不幸的是,它不起作用。奇怪的是我可以看到全局答案设置正确。就像,不知何故,我必须通过传递“它自己的该死值”来“唤醒”观察者才能开始广播......

以上是关于可观察 - 多个订阅者的主要内容,如果未能解决你的问题,请参考以下文章

具有多个订阅者的 Angular 2 Observable

设计模式

等待多个可观察请求完成使用 RXSwift

Rxjs:将中间订阅和完整的可观察对象合并,并整体完成

一个可作为 ReplaySubject 但仅适用于第一个订阅者的 Rx 可观察对象?

嵌套可观察订阅问题,无法取消订阅