我正在尝试从服务中返回一个Observable,该服务将允许您收听任何Pusher频道。
很好,希望取消订阅Observable(使用unsubscribe
生成)时,我想从推送器通道中使用createRealtimeObservable(...)
。
有什么想法吗?
public realtimeObservable (channelName, eventName): Observable<any> {
const realtimeObservable$ = new Observable((observer) => {
const channel = this.pusher.subscribe(`private-organization-${this.authService.userProfile.organization_id}-${channelName}`)
channel.bind(eventName, (data) => {
observer.next(data.payload)
})
})
return realtimeObservable$
}
答案 0 :(得分:1)
当您手动创建一个Observable时,您有责任在取消订阅后清除所有资源。幸运的是,Observable具有一种机制,允许您在创建时返回退订/处置函数:
return Observable.create((obs) => {
const channel = this.pusher.subscribe(`private-organization-${this.authService.userProfile.organization_id}-${channelName}`)
channel.bind(eventName, (data) => {
observer.next(data.payload)
});
return () => {
// unsubscribe event
channel.unsubscribe(); // NOTE: i do not know the syntax for unsubscribing a Pusher channel, impl as required.
};
});
NB:Observable.create()
是new Observable()
的语法糖