Ngrx store - задержка нажатия после испускания действия - PullRequest
0 голосов
/ 28 мая 2019

Используя Ngrx store, у меня есть 2 следующих эффекта:

@Effect({ dispatch: false })
    toastSuccess$ = this.actions$
        .pipe(
            ofType(TOAST_SUCCESS),
            map((action: any) => this.toastr.success(action.payload, 'Success'))
        );

@Effect()
    appContextChanged$ = this.actions$
        .pipe(
            ofType(UPDATE_USER_APP_CONTEXT_SUCCESS),
            mergeMap(() => of(
                { type: TOAST_SUCCESS, payload: 'App context updated successfully!' })),
            tap(() => location.reload()),
            catchError(() => of({ type: UPDATE_USER_APP_CONTEXT_FAILED }))
        )

Что я хотел бы сделать, так это отложить tap location.reload() на 1000 мс (поэтому тост показывается на секунду, а затем страница обновляется), но я пытался использовать delay везде без успех. Как я могу отложить обновление страницы, т.е. location.reload() после эффекта тоста?

1 Ответ

0 голосов
/ 28 мая 2019

Создайте для этого другой эффект, чтобы appContextChanged$ мог закончить и уведомить ваш toastSuccess эффект:

@Effect({dispatch: false})
reload$ = this.actions$
  .pipe(
    ofType(TOAST_SUCCESS),
    tap(() => location.reload())

Кажется, toastr.success возвращает действие, это правда? В этом случае вы можете прослушать это действие вместо Toast_sucess в операторе ofType.

...