Оператор карты rxjs не запускается в трубе после switchMap
Я думал, что я довольно здравый смысл, когда дело дошло до 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 ответ
Попробуйте использовать что-то вроде этого: Эффект входа из примера приложения
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 будет сбрасывать эффект, но выхлопная карта ждет, пока внутренняя наблюдаемая закончится.
Узнайте больше о различиях этих двух операторов