根据数据将一个主题分成不同的主题
问题描述:
我有一个APIService使用其他服务连接到websocket。 websocket服务返回一个类型为Subject<MessageEvent>
的套接字。然后在我的APIService中,我想根据有效载荷将这个主题吐到不同的主题中。我APIService看起来是这样的:根据数据将一个主题分成不同的主题
export class APIService {
public sonos: Subject<sonosData>;
public commits: Subject<commitData>;
constructor(wsService: WebsocketService) {
this.sonos = <Subject<sonosData>>wsService
.connect(WEBSOCKET_URL)
.map((response: MessageEvent) => {
let data = JSON.parse(response.data);
if(data.sonos) {
return data.sonos;
}
});
}
}
是否有另一家运营商,而不是map
,我可以使用?如果我写一些代码须藤这也应该是这样的:
export class APIService {
public sonos: Subject<sonosData>;
public commits: Subject<commitData>;
constructor(wsService: WebsocketService) {
wsService
.connect(WEBSOCKET_URL)
.forEach((response: MessageEvent) => {
let data = JSON.parse(response.data);
if(data.sonos) {
this.sonos = data.sonos;
}
if(data.commits) {
this.commits = data.commits;
}
});
}
}
但随后的公共变量不会被定义和使用它们不能向他们订阅,导致一个错误,因为我的部件。
答
您应该能够初始化空的对象,并得到其他组件订阅这样的主题:
sonos = new Rx.Subject()
commits = new Rx.Subject();
接下来,当你回来的数据,你可以做这样的事情
wsService
.connect(WEBSOCKET_URL)
.forEach((response: MessageEvent) => {
let data = JSON.parse(response.data);
if(data.sonos) {
this.sonos.onNext(data.sonos);
}
if(data.commits) {
this.commits.onNext(data.commits);
}
});
非常感谢!它的工作,onNext方法不适合我。但接下来的方法工作,可能是同样的权利? – trevligheten
是的。我使用Javascript实现编写代码片段,可能Typescript有点不同。它为你工作的主要观点。 –