Оператор карты rxjs не запускается в трубе после switchMap - PullRequest
0 голосов
/ 29 мая 2018

Я думал, что я довольно здравомыслящий, когда дело дошло до rxjs, но я не могу понять, что я делаю неправильно.Я пытаюсь выучить ngrx, преобразовав логин моего пользователя в эффект.Мой эффект срабатывает правильно, и правильный ответ токена возвращается (проверяется путем входа в консоль) с моего сервера, но оператор карты никогда не срабатывает в моем эффекте.

Вот мой код эффекта:

@Injectable()
export class UserEffects {

constructor(
    private authService: AuthService,
    private actions$: Actions
) { }

    @Effect() loginUser$ = this.actions$
    .ofType<userActions.LoginUserAction>(userActions.LOGIN_USER).pipe(
        switchMap(action => this.authService.Login(action.payload)),
        map(user => (new userActions.LoginUserSuccessAction(user)))
    );
}

и запрос в моем слое обслуживания:

public Login(model: ILogin) {
return this.http.post<string>(`${baseUrl}api/login`, model).pipe(
  // Returns the object to be stored in AppState
  map(response => this.GetTokenInformation(response))
);

}

Я попытался использовать flatMap и mergeMap на случай, если что-то упустили в документации ngrx, но ни один изте тоже работали.

мои операторы импортируются следующим образом:

import { map, switchMap } from 'rxjs/operators';

дайте мне знать, если я могу предоставить что-нибудь еще ... спасибо!

1 Ответ

0 голосов
/ 29 мая 2018

попробуйте использовать что-то вроде этого: Эффект входа в систему из примера приложения

loginUser$ = this.actions$.pipe(
  ofType<userActions.LoginUserAction>(userActions.LOGIN_USER),
  map(action => action.payload),
  exhaustMap((auth: any) =>
    this.authService
      .Login(auth)
      .pipe(
        map(user => (new userActions.LoginUserSuccessAction(user)))
      )
  )
);

switchMap произведет сброс эффекта, но выхлопная карта ожидает, пока внутренняя наблюдаемая закончится.

Узнайте больше о различиях этих двух операторов

...