Я работаю над эффектом, который будет сервером опроса.
То, чего я хочу добиться, это:
1) Отправить запрос GET на сервер
2) После получения ответа подождите 3 секунды
3) Отправить тот же запрос GET
4) После получения ответа подождите 3 секунды
5) Отправить тот же запрос GET
... и т. Д.
Код, который у меня сейчас есть, не совсем работает, так как он опрашивает сервер каждые 3 секунды, независимо от того, был ли получен ответ:
@Effect()
pollEntries$ = this.actions$.pipe(
ofType(SubnetBrowserPageActions.SubnetBrowserPageActionTypes.StartPollingSubnetEntries),
switchMap(() => {
return timer(0, 3000);
}),
takeUntil(this.actions$.pipe(ofType(SubnetBrowserPageActions.SubnetBrowserPageActionTypes.StopPollingSubnetEntries))),
switchMap(() => {
return this.subnetBrowserService.getSubnetEntries();
}),
map((entries) => {
return new SubnetBrowserApiActions.LoadEntriesSucces({ entries });
}),
catchError((error) => {
return of(new SubnetBrowserApiActions.LoadEntriesFailure({ error }));
}),
);
Еще одна вещь, с которой я борюсь, это как прекратить опрос. Если я отправляю действие StopPollingSubnetEntries
до того, как запрос отправляется на сервер, то оно работает нормально - однако, если я отправляю его после отправки запроса, то я получаю еще один последующий ответ, прежде чем опрос будет остановлен.