Как мне сделать эту работу?
switchMap((value: number) => throwError(value)
.pipe(
customeErrorHandler((value: number) => value * 3)
);
);
export const customErrorHandler = (function: Function) =>
catchError() => of( the function passed as parameter evaluated with the value );
Не передавая функцию и значение в качестве отдельных аргументов, все дело в этом.
Например, с NgRx с эффектом, который вы возвращаете:
map(() => new SuccessAction()),
catchError((value: number) => new FailureAction(value))
Я хочу сделать то же самое, что и catchError, но с использованием собственного обработчика.
Кроме того, он должен обрабатывать ошибку, не влияя на случай успеха, он будет передан в конвейер эффектов, и возвращаемое действие будет отличаться для успеха и неудачи.
f.e:.
type ActionCreationFunction = (payload: any) => Action;
export const effectsErrorHandler = (failureAction: ActionCreationFunction) =>
catchError((err: any): Observable<Action> =>
of(failureAction(payload))
.pipe(tap(() => console.log(err))),
Об эффекте:
.pipe(
map(() => new AuthLoginSuccess()),
effectsErrorHandler((counter: number) => new AuthLoginFailure(counter)),
);
На основании ссылки, предоставленной @martin, это сработало:
export const effectsErrorHandler = (failureAction: ActionCreationFunction) =>
source =>
Observable.create(subscriber =>
source.subscribe(
value => subscriber.next(value),
err => subscriber.next(failureAction(err))
.pipe(tap(() => console.log(err))),
),
);
Но разве нет способа просто обернуть catchError, как в моем примере, вместо того, чтобы обернуть все как здесь?