根据数据将一个 Subject 拆分成不同的 Subject
Split one Subject into different Subjects depending on the data
我有一个 APIService,它使用另一个服务连接到 websocket。 websocket 服务 returns 类型 Subject<MessageEvent>
的套接字。然后在我的 APIService 中,我想根据有效负载将这个 Subject 吐到不同的 Subjects 中。我的 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
之外,还有其他运算符可供我使用吗?如果我为此编写一些 sudo 代码,它将如下所示:
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;
}
});
}
}
但是 public 变量不会被定义并导致错误,因为使用它们的组件无法订阅它们。
您应该能够像这样初始化空主题并让其他组件订阅主题:
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);
}
});
我有一个 APIService,它使用另一个服务连接到 websocket。 websocket 服务 returns 类型 Subject<MessageEvent>
的套接字。然后在我的 APIService 中,我想根据有效负载将这个 Subject 吐到不同的 Subjects 中。我的 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
之外,还有其他运算符可供我使用吗?如果我为此编写一些 sudo 代码,它将如下所示:
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;
}
});
}
}
但是 public 变量不会被定义并导致错误,因为使用它们的组件无法订阅它们。
您应该能够像这样初始化空主题并让其他组件订阅主题:
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);
}
});