如果我每次取消订阅旧订阅,我会多次调用包含订阅的方法吗?

时间:2018-03-28 23:16:51

标签: angular rxjs subscribe unsubscribe

我正在使用订阅构建一个Angular应用。该组件是一个聊天消息页面,其中包含所有聊天消息的菜单,您可以单击每个人以查看与该人的聊天消息。这是我的组件中的一个函数

getAllChatMessages() {

  this.chatService
    .getChatMessages(this.currentChatId, this.otherUserId)
    .takeUntil(this.ngUnsubscribe)
    .subscribe(userProfile => {
      //some logic here
    });
}

现在,每当用户点击与他们聊天的其他人时,就会调用此getAllChatMessages()函数。所以在这种情况下,订阅被反复调用多次,尽管有this.currentChatIdthis.otherUserId不同。 takeUntil仅在组件被销毁时取消订阅。

我真正不清楚的是旧订阅是否仍在那里,而另一个实例是在下一次getAllChatMessages()调用时实例化的。由于每个订阅拥有不同的资源,每次随后调用getAllChatMessages()时,我是否应取消订阅旧订阅?

修改

如果我确实需要清除旧订阅,我可能会看到这样的东西?这样在每次后续调用中,我都会删除和取消订阅getAllChatMessages()的最后一次调用。

getAllChatMessages() {
  if (this.getChatMsgSub) {
    this.getChatMsgSub.unsubscribe();
  }

  this.getChatMsgSub = this.chatService
    .getChatMessages(this.currentChatId, this.otherUserId)
    .takeUntil(this.ngUnsubscribe)
    .subscribe(userProfile => {
      //some logic here
    });
  }

1 个答案:

答案 0 :(得分:1)

是 - 如果不再需要订阅,您应该取消订阅。使用take运算符的示例:

this.chatService
  .getChatMessages(this.currentChatId, this.otherUserId).pipe(take(1))
  .subscribe(...)

你也不需要在破坏时清理它,因为它在第一次发射后已经死了。