如何简化NgRx效果?只是区别了他们调用的服务方法-

问题描述 投票:1回答:1

我从NgRx效果文件中获得了以下代码:

  registerUser$: Observable<Action> = createEffect(() =>
    this.actions$.pipe(
      ofType(AuthStoreActions.registerUser),
      switchMap(action => {
        return this.authService.registerWithEmailAndPassword(action.userCredentials).pipe(
          map(() => AuthStoreActions.authSuccess({ navigateTo: "authentication/restaurant" })),
          catchError(error => of(AuthStoreActions.setError({ error })))
        );
      })
    )
  );
  loginUser$: Observable<Action> = createEffect(() =>
    this.actions$.pipe(
      ofType(AuthStoreActions.loginUser),
      switchMap(action => {
        return this.authService.loginWithEmailAndPassword(action.userCredentials).pipe(
          map(() => AuthStoreActions.authSuccess({ navigateTo: "authentication/restaurant" })),
          catchError(error => of(AuthStoreActions.setError({ error })))
        );
      })
    )
  );

在服务呼叫之后,两者都在做相同的事情。如何消除重复性?我还有其他同级效果,它在收到服务器的响应后比本例做得更多,但是除了他们调用的方法之外,他们在做同样的事情。

angular typescript ngrx ngrx-store ngrx-effects
1个回答
0
投票

使用pipe功能,您可以将那些身份验证存储操作员整合为一个。

功能组合的力量!

import { pipe } from "rxjs";

const authSuccess = pipe(
  map(() => AuthStoreActions.authSuccess({ navigateTo: "authentication/restaurant" })),
  catchError(error => of(AuthStoreActions.setError({ error }))));

loginUser$: Observable<Action> = createEffect(() =>
  this.actions$.pipe(
    ofType(AuthStoreActions.loginUser),
    switchMap(action => this.authService.loginWithEmailAndPassword(action.userCredentials).pipe(authSuccess)));

registerUser$: Observable<Action> = createEffect(() =>
    this.actions$.pipe(
      ofType(AuthStoreActions.registerUser),
      switchMap(action => this.authService.registerWithEmailAndPassword(action.userCredentials).pipe(authSuccess)));
© www.soinside.com 2019 - 2024. All rights reserved.