У меня есть следующий код эффекта:
@Effect() public setupFirstAccess$ = this.actions$
.ofType<usersActions.SetupUserAccessAction>(usersActions.SETUP_USER_ACCESS).pipe(
switchMap(action => this.usersService.setupUserAccess(action.payload)
.pipe(
map(() => new usersActions.SetupUserAccessSuccessAction()),
catchError(error =>
{
return of(new applicationActions.ShowHttpResponseError(
{
error: error,
nextAction: new usersActions.SetupUserAccessFailureAction()
}
));
}
)
)
));
Я использую эту структуру эффектов в ОДНОМ эффекте, поэтому я пытаюсь добавить такую функцию:
protected createSimpleEffect<T>(data: {
type: string,
dataFetchFunction: (action: Action) => Observable<T>,
successFunction: (result: any, action: Action) => void,
failureFunction: (action: Action) => Action
}): Observable<any>
{
return this.actions$
.ofType(data.type).pipe(
switchMap(action => data.dataFetchFunction(action)
.pipe(
map((result: any) => data.successFunction(result, action),
catchError(error =>
{
return of(new applicationActions.ShowHttpResponseError(
{
error: error,
nextAction: data.failureFunction(action)
}
));
}
)
)
))
);
}
И я называю это так:
@Effect() public setupUserAccess$ = this.createSimpleEffect<void>({
type: usersActions.SETUP_USER_ACCESS,
dataFetchFunction: (action: usersActions.SetupUserAccessAction) => this.usersService.setupUserAccess(action.payload),
successFunction: (result, action) => new usersActions.SetupUserAccessSuccessAction(),
failureFunction: (action) => new usersActions.SetupUserAccessFailureAction()
});
Исходный код работает, эффект запускает службу пользователя, затем вызывает действие success, и если я получаю ошибку по запросу, он вызывает оператор catchError.
Альтернативная версия работает до того момента, когда она запускает службу пользователя, но когда я получаю ошибку на бэкэнде, она не выполняет код в операторе catchError.
Я что-нибудь связал с наблюдаемыми при рефакторинге кода функции?