[英]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.