Angular / NgRx - эффект: отмена подписки и опроса, когда панель расширения angular закрыта - PullRequest
0 голосов
/ 15 марта 2020

У меня есть список, и каждый элемент / задание отображается на панели расширения материала angular.

Когда пользователь открывает один из расширителей, я вызываю API и получаю информацию, которая будет отображается в теле экспансора. Существует также механизм объединения, который обновляет данные из API каждую минуту.

Мне нужно запустить подписку, выполнить http-вызов и запустить опрос, только для открытых экспансоров, отменить подписку и прекратить опрос, когда пользователь закрывает любой расширитель

В компоненте - angular панель расширителя материала:

ngOnChanges() {
    if (this.panelOpenState === true) {
      this.currentStatus$ = this.store.pipe(select(fromJobs.getcurrentRunStatus(this.jobIDSelected)));   
    }
    if (this.panelOpenState === false) {
      this.store.dispatch(new Cancel_Refresh_Execution_Statuses(this.jobIDSelected));
    }
  }

Моя проблема возникает при добавлении параметра для отправки действия только для JOB_ID, Когда панель расширения для этого элемента / задания закрывается, выдается сообщение об ошибке: «Невозможно вызвать выражение, тип которого не имеет подписи вызова. Тип 'String' не имеет совместимых подписей вызовов. '

Это мое действие по отмене:

export class Cancel_Refresh_Execution_Statuses implements Action {
  readonly type = JobsActionType.CANCEL_REFRESH_EXECUTION_STATUSES;
  constructor(public jobId: string) {}
}
  @Effect()
  refreshCurrentExecutedJobStatuses$: Observable<Action> = this.actions$.pipe(
    ofType<jobActions.LoadJobStatusExecuted>(jobActions.JobsActionType.LOAD_JOB_STATUS_EXECUTED),
    mergeMap(
      (actions: jobActions.LoadJobStatusExecuted) =>
        timer(1000, 60000).pipe(
          concatMap(() =>
            from(
              this.jobsService.fetchJobsRunningStatus$(actions.param).pipe(
                takeUntil(
                  this.actions$.pipe(
                    ofType<jobActions.Cancel_Refresh_Execution_Statuses>(
                      //GETTING AN ERROR HERE: I CAN'T ADD A PARAM WITH THE JOB_ID 
                      //THAT I NEED TO CANCEL THE POLLING AND SUBSCRIPTION
                      jobActions.JobsActionType.CANCEL_REFRESH_EXECUTION_STATUSES(actions.param)
                    )
                  )
                ),
                map((lastRefreshStatus: Status) => new jobActions.JobsStatusExecutedSuccess(lastRefreshStatus)),
                catchError(err => of(new jobActions.JobsStatusExecutedFail(err)))
              )
            )
          )
        ) //end timer
    )
  );

Большое спасибо!

1 Ответ

0 голосов
/ 27 марта 2020

ofType фильтрует поток действий и имеет тип в качестве параметра, а не функцию.

this.actions$.pipe(ofType(jobActions.JobsActionType.CANCEL_REFRESH_EXECUTION_STATUSES))
...