【问题标题】:Rxjs observer subscription disappear somehow in Angular projectRxjs 观察者订阅在 Angular 项目中以某种方式消失
【发布时间】:2021-05-13 16:12:13
【问题描述】:

我有一个 MessageService 组件,用于在应用程序中的任何位置进行组件之间的交互,它们只使用注入的 MessageService 的 subscribe 和 sendMessage 方法。

当我用A加载页面时,可以交换B组件消息,但是由于使用另一个独立的可观察函数(HttpClient请求加载数据的http.get),MessageService主题订阅者从2减少到1。A和B无法交换消息。

我的问题是,我怎样才能知道后台发生了什么?

已更新 - 以下

当页面加载时没有问题,但在从网络加载一些数据之后。在 A 消息被触发但它没有到达 B

A. (its container has injected MessageService, and accessed by "this")

<file-export [fileExportInput]="this" *ngIf="hasExport"></file-export>

@Input()
  fileExportInput: FileExportInputInterface;

  ngOnInit() {
    console.log("fileexport message service:", this.fileExportInput.messageService);
    this.fileExportInput.messageService ? this.message = true : this.message = false;
    if (this.message) {
      this.message$ = {
        next: (message: Message) => {
    ....    
     this.$subscription = this.fileExportInput.messageService.subscribe(this.message$);
    }
  }

B
constructor(private router: Router, private boeManagementService: BoeManagementService,
    private translateService: TranslateService, public messageService: MessageService) {
      console.log("boex message service:", this.messageService);
    /** file-export */
    this.message$ = {
      next: (message: Message) => {
        if (message.type === MessageType.FILE_EXPORT_ELEMENTS_REQUEST) { <---- CANT be reached this part
....
    this.$subscription = this.messageService.subscribe(this.message$);
  }

提前致谢,

沙巴

【问题讨论】:

  • 如果您显示一些代码会更容易提供帮助。如果您可以在StackBlitz 上重现,那就更容易了 :-)
  • 恐怕它会运作良好 - 因为它不应该发生,我需要一些提示如何使用控制台日志或 chrome 开发工具调试它,我看到它从 2 到 1 订阅但我不能了解更多信息。
  • 组件订阅的服务上是否有公开的messages$ observable?当您说“无法交换消息”时,您的意思是 A 发送消息而 B 没有收到?
  • MessageService pastebin.com/hEisA36r 来了,Q1:不,它是私有的,Q2:是的
  • 能否也提供组件代码?是否使用*ngIf 控制任一消耗组件。也许组件被破坏导致取消订阅?也许第二个组件在消息发送后订阅,因此看起来它没有收到消息......

标签: angular rxjs subscription


【解决方案1】:

我终于知道为什么订阅被关闭了。 Observer.next 处理程序中的步骤引发了异常,我可以通过 Chrome devtools pause on exception feature in debug mode 找到。

由于我消除了异常的原因,一切正常。

【讨论】:

    猜你喜欢
    • 2018-01-19
    • 2021-10-30
    • 1970-01-01
    • 2018-07-31
    • 2021-06-14
    • 2018-06-11
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    相关资源
    最近更新 更多