【发布时间】:2018-06-18 14:25:51
【问题描述】:
我已经通过 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
我用 "rxjs": "^6.2.1", "rxjs-compat": "^6.2.1",
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;
}
我随机做的,现在我不明白为什么它开始起作用了
【问题讨论】:
-
当我从
listen方法中删除filter函数时效果很好