包含订阅的方法被多次调用,我应该每次都取消订阅旧订阅吗?
Method containing a Subscribe is called multiple times, should I unsubscribe old subscriptions each time?
我正在构建一个包含订阅的 Angular 应用。该组件是一个聊天消息页面,其中有一个包含您与其他人的所有聊天消息的菜单,您可以单击每个人以查看与该人的聊天消息。这是我组件中的一个函数
getAllChatMessages() {
this.chatService
.getChatMessages(this.currentChatId, this.otherUserId)
.takeUntil(this.ngUnsubscribe)
.subscribe(userProfile => {
//some logic here
});
}
现在,每当用户点击与他们聊天的其他人时,都会调用此 getAllChatMessages()
函数。因此,在这种情况下,尽管 this.currentChatId
和 this.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
});
}
是 - 如果不再需要订阅,您应该取消订阅。使用 take
运算符的示例:
this.chatService
.getChatMessages(this.currentChatId, this.otherUserId).pipe(take(1))
.subscribe(...)
你也不需要在销毁时清理它,因为它在第一次发射后就已经死了。
我正在构建一个包含订阅的 Angular 应用。该组件是一个聊天消息页面,其中有一个包含您与其他人的所有聊天消息的菜单,您可以单击每个人以查看与该人的聊天消息。这是我组件中的一个函数
getAllChatMessages() {
this.chatService
.getChatMessages(this.currentChatId, this.otherUserId)
.takeUntil(this.ngUnsubscribe)
.subscribe(userProfile => {
//some logic here
});
}
现在,每当用户点击与他们聊天的其他人时,都会调用此 getAllChatMessages()
函数。因此,在这种情况下,尽管 this.currentChatId
和 this.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
});
}
是 - 如果不再需要订阅,您应该取消订阅。使用 take
运算符的示例:
this.chatService
.getChatMessages(this.currentChatId, this.otherUserId).pipe(take(1))
.subscribe(...)
你也不需要在销毁时清理它,因为它在第一次发射后就已经死了。