Так что я знаю, что это абсолютно возможно, но я никогда не использовал RxJs, кроме простых http get и подписок. У меня есть служба, которая прослушивает события WebSocket, когда срабатывает 1 такое событие, я вызываю Api для загрузки некоторых данных. Если это событие websocket срабатывает, когда 1 API уже находится в пути, я хочу отменить его, а затем перезапустить новый вызов API. Я не уверен, правильно ли я использую SwitchMap, и я теряюсь, как использовать Pipe с RxJs 6.
Это правильное использование SwitchMap и pipe для получения моих данных? Кажется, что он работает правильно при запуске большого количества событий, но, похоже, имеет большую задержку после того, как сработало последнее событие, однако это может привести к отставанию сервера, поскольку мой сервер API также является сервером веб-сокетов.
Мой компонент:
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>