angular - RxJs管道主题不发射值
问题描述
我已经通过 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;
}
我是随机做的,现在我不明白为什么它开始起作用了
解决方案
just return property source and it started to work properly
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;
}
推荐阅读
- powershell - Windows 命令控制台运行 powershell 脚本(ps1)
- r - 在 R 中重复一个特定的单元格
- vue.js - 使用条件渲染时,如何防止在每个条件下重复子组件?
- c# - 异常驱动编程 C#
- javascript - 如何通过使用 JavaScript 函数单击按钮来返回系统日期?
- c# - 如何通过 C# 或直接从数据库中从 SQL Server 查询的结果中插入批量记录到 SQLite 表中
- javascript - 如何在javascript中的querySelector()的标签中包含输入?
- ios - Objective-c 中的推送通知
- dojo - 使用 Intern.js 进行功能测试:getVisibleText() 不适用于 dijits
- vapor - 在命令中访问数据库