[英]RxJS: unsubscribe from nested subscribe
我使用 SockJS 和StompJS ,當我在瀏覽器中打開我的應用程序時,有時它會在連接到 websocket 之前嘗試訂閱一些主題。 我希望主題訂閱等到應用程序連接到 websocket。
export class SocksService {
...
public subscribe<T>(destination: string, callback?: (body: T) => void, headers?: object): Observable<Subscription> {
const subscription = new Subject<Subscription>();
headers = headers || {};
this.status.pipe(
first(status => status === ConnectionStatus.CONNECTED)
).subscribe((status: ConnectionStatus) => {
subscription.next(this.stompClient.subscribe(destination, (message: Message) => {
if (callback) {
callback(JSON.parse(message.body) as T);
}
}, headers));
});
return subscription.asObservable();
}
...
}
這就是我實現這段代碼的原因,我稱之為:
this.socksService.subscribe<User>('/topic/user', (user: User) => {
console.log('user received', user);
}).subscribe(subscription => this.userSubscription = subscription);
所以我只在連接狀態為已connected
時才訂閱該主題,並且僅在客戶端第一次成功連接時才會調用它。
我想稍后取消訂閱該主題,所以我需要內部訂閱返回的Subscription
object 並且我還需要來自內部訂閱的消息。
我實現的效果很好,但我認為必須有更好的方法來做到這一點。
(我試過 rx-stomp,但它有很多錯誤。)
您說您嘗試了 rx-stomp 但您是否嘗試過 rx-stomp 的 Angular2+ 版本,稱為ng2-stompjs ? 它將關鍵類公開為 Angular 可注入服務。
在 rx-stomp 下查看它的提及,這里: https://github.com/stomp-js/ng2-stompjs#documentation
...它的實現(Angular 7)通過一個很好的一步一步,在這里: https://stomp-js.github.io/guide/ng2-stompjs/ng2-stomp-with-angular7.html#receiving -消息
例如:
this.rxStompService.watch('/topic/demo').subscribe((message: Message) => {
this.receivedMessages.push(message.body);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.