Как сделать http-опрос в эффекте ngrx - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть этот эффект, и я пытаюсь использовать таймер для опроса данных каждые х секунд. Но я не могу понять, как таймер должен взаимодействовать с потоками данных. Я попытался добавить еще один switchMap в начало, но потом я не смог передать действие и полезную нагрузку на второй switchmap. Есть идеи?

Я посмотрел этот пост , но моя ситуация немного отличается. Я передаю полезную нагрузку с моим действием, к которому мне нужно получить доступ, и использую ngrx 6.

@Effect()
getData = this.actions$
    .ofType(appActions.GET_PLOT_DATA)
    .pipe(
        switchMap((action$: appActions.GetPlotDataAction) => {
            return this.http.post(
                `http://${this.url}/data`,
                action$.payload.getJson(),
                {responseType: 'json', observe: 'body', headers: this.headers});
        }),
        map((plotData) => {
            return {
                type: appActions.LOAD_DATA_SUCCESS,
                payload: plotData
            }
        }),
        catchError((error) => throwError(error))
    )

1 Ответ

0 голосов
/ 11 сентября 2018

Это должно работать (я проверил это).Пожалуйста, добавьте эту вершину switchMap.Ключевым оператором здесь является mapTo.Этот оператор отобразит входящее значение интервала в полезную нагрузку.

switchMap((action$: appActions.GetPlotDataAction) =>
   interval(5000).pipe(mapTo(action$))
);

Обновление (подсказка): - Если вы хотите немедленно начать опрос, а затем каждый {n}мс вы можете использовать оператор startWith или timer наблюдаемый

switchMap((action$: appActions.GetPlotDataAction) =>
  interval(5000).pipe(startWith(0), mapTo(action$))
);

или

switchMap((action$: appActions.GetPlotDataAction) => 
  timer(0, 1000).pipe(mapTo(action$))
);
...