бесконечный цикл в действии - PullRequest
0 голосов
/ 03 июня 2019

РЕДАКТИРОВАТЬ У меня есть следующее =>

  @Effect()
  createMission$ = this.actions$.pipe(
    ofType<featureActions.CreateMissionRequest>(featureActions.ActionTypes.CreateMissionRequest),
    switchMap((action) =>
        this.store$.pipe(select(MissionsStoreSelectors.getById(), {id : action.payload.routeId}))),
    switchMap((mission) => this.dataService.createMission(this.APIMissionFromMissionRoute(mission)).pipe(
        map(response => new featureActions.CreateMissionSuccess({response, mission})),
        catchError((error: HttpErrorResponse) => {
          return of(new featureActions.CreateMissionFailed({error}));
        }),
      )
    )
  );

сейчас нет сервера, но я фальсифицировал ответ с наблюдаемой

  createMission(params: API_MODEL.IMissionAPI): Observable<API_MODEL.CreateMissionResponse> {
    return new Observable(observer => {
      setTimeout(() => {
        observer.next({
            result: {
                status: 2
            },
            missionID: {
                identifier: 41
            }
        });
        observer.complete();
      }, 120);
    });
  }

Дело в том, что моя вторая карта переключателей switchMap((mission) => this.dataService.createMission(this.APIMissionFromMissionRoute(mission)) зацикливается это потому, что мой первый switchMap получает selectore с параметром, и когда мое состояние обновляется, он снова запускает мой второй switchmap.

Я хотел бы знать, есть ли способ получить мое текущее состояние другим способом.

Я пытался использовать последний, но мне нужно получить доступ к текущему действию action.payload, чтобы получить то, что я хочу, и я не могу передать действие с последним

1 Ответ

0 голосов
/ 03 июня 2019

Вы должны использовать оператор take, чтобы завершить внешнюю наблюдаемость, как это [в противном случае, как вы сказали, что хранилище будет обновлено и будет запускать селектор] -

this.store$.pipe(select(MissionsStoreSelectors.getById(), {id : action.payload.routeId})).pipe(take(1)))
...