我已经为RxJs支持完成了WebSockets的一些实现。
listen<T>(action: Action): Observable<T> {
return this.subject
.pipe(
filter(value => value.action === action),
map(value => {
delete value.action;
delete value.id;
return value;
})
);
}
此方法返回Subject的管道实例,该实例将发出在websocket.onmessage回调中发送到WebSocket实例的所有消息。
ws.onmessage = ({data}) => this.subject.next(JSON.parse(data));
问题是我有两个组件使用这种方法来监听某种类型的消息,我只能听一个动作。 例如,如果我有这样的事情:
this.websocketService.listen('incomingStream').subscribe(m => console.log(1));
this.websocketService.listen('incomingStream').subscribe(m => console.log(2));
我总是在控制台得到1。我想同时多次听这个事件。
UPD.1
我用了 &#34; rxjs&#34;:&#34; ^ 6.2.1&#34;, &#34; rxjs-compat&#34;:&#34; ^ 6.2.1&#34;,UPD.2
我只返回属性source
,它开始正常工作
listen<T>(action: Action): Observable<T> {
return this.subject
.pipe(
filter(value => value.action === action),
map(value => {
delete value.action;
delete value.id;
return value;
})
)
.source;
}
我是随机完成的,现在我不明白为什么会开始工作
答案 0 :(得分:0)
尝试使用share运算符
grep "\"tool\":\"SEETEST\"" * -l | xargs ls -lSh
答案 1 :(得分:0)
只返回属性源,它开始正常工作
listen<T>(action: Action): Observable<T> {
return this.subject
.pipe(
filter(value => value.action === action),
map(value => {
delete value.action;
delete value.id;
return value;
})
)
.source;
}