无限循环生效

时间:2019-06-03 04:32:12

标签: angular rxjs ngrx

EDIT 我有以下=>

  @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  switchMap((mission) => this.dataService.createMission(this.APIMissionFromMissionRoute(mission)) 正在循环播放。这是因为我的第一个switchMap正在获取带有参数的选择器,并且当我的状态更新时,它再次触发了我的第二个switchmap。

我想知道是否可以通过另一种方式获取我的当前状态。

我尝试过withLatest,但是我需要访问当前的action.payload才能获得所需的内容,而我无法将操作传递给withLatest

1 个答案:

答案 0 :(得分:0)

您应该使用take运算符来使外部可观察的对象完整地完成[否则,您说存储将被更新并将触发执行选择器]-

apply