所以我知道这是完全可能的,但我从来没有使用过RXJS,除了简单的HTTPGET和SUBSCRIBE。我有一个正在监听WebSocket事件的服务,当1个此类事件触发时,我调用API来加载一些数据。如果WebSocket事件在1 API已经在传输过程中触发,我想取消它,然后重新启动一个新的API调用。我不确定是否正确使用了switchmap,也不知道如何将pipe与rxjs 6结合使用。
这是正确使用switchmap和pipe来获取我的数据吗?当触发大量事件时,它似乎工作正常,但在触发最后一个事件后似乎有很长的延迟,但这可能是服务器延迟,因为我的API服务器也是我的WebSocket服务器。
我的组件:
clients: Client[] = [];
constructor(public statsApi: StatisticsService)
{
this.statsApi.OnClientUpdate.pipe(switchMap(x => { return this.statsApi.GetClients() })).subscribe(x =>
{
console.log(x);
this.LoadClients(x);
});
}
private LoadClients(clients:Client[] = null): void
{
if (clients != null)
{
this.clients = clients;
} else
{
this.statsApi.GetClients().subscribe(data =>
{
this.clients = data;
});
}
}
ngOnInit()
{
this.LoadClients();
}
getclients服务内部:
public GetClients(): Observable<Client[]>
{
return this.http.get<Client[]>('http://localhost:5000/api/client');
}
OnClientUpdate returns an Observable<number>