当谈到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';
让我知道我是否可以提供其他任何东西......谢谢!
答案 0 :(得分:0)
尝试使用以下内容: Login Effect from Example App
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将重置效果,但exhaustMap会等到内部可观察完成。
详细了解这两家运营商的差异