情况
我如何设计一个功能,让用户可以访问一个页面,订阅实时更改,如果用户使用Supplementary realtime(PostgreSQL)导航离开页面,则取消订阅?
通过使用Angular Frontend,我的想法是使用一个实现通道的服务。如果用户导航到组件,用户订阅通道。如果用户导航离开并且组件被销毁,用户取消订阅。
这工作正常,但如果我再次导航到页面,它会抛出以下错误:
尝试多次订阅时出错。每个通道示例只能调用一次“subscribe”
问题
对于这种情况,最好的解决方案是什么?每次用户访问页面时,我都必须创建一个新的频道示例吗?如果是,最好的方法是什么?
我的密码
服务频道:
private notificationsChannel: RealtimeChannel = supabaseClient
.channel('notificationsChannel')
.on('postgres_changes', {
...
})``
字符串
订阅服务的方法:
public subscribeToRealtimeNotifications(): void {
this.notificationsChannel.subscribe()
}
型
服务中取消订阅的方法:
public async unsubscribeToRealtimeNotifications(): Promise<void> {
const response = await this.notificationsChannel.unsubscribe()
}`
型
组件在angular ngOnInit生命周期钩子中订阅:
async ngOnInit(): Promise<void> {
this.notificationsService.subscribeToRealtimeNotifications()
}
型
组件在angular ngOnDestroy生命周期钩子中取消订阅:
async ngOnDestroy(): Promise<void> {
await this.notificationsService.unsubscribeToRealtimeNotifications()
}
型
如果使用this.supabaseClient.removeChannel(this.notificationsChannel)
,也会发生同样的情况。
1条答案
按热度按时间34gzjxbg1#
每次用户访问一个页面时,我都必须创建一个新的频道示例吗?如果是,最好的方法是什么?
不你知道
为什么不在订阅之前简单地创建一个新的通道示例呢?
字符串