angular - 行为主题的订阅不适用于多重语句
问题描述
我有一个非常独特的问题。
我在我的服务中创建了一个行为主题
@Injectable({
providedIn: 'root'
})
export class AuthService {
baseUrl = `${environment.url}`;
private appUser: BehaviorSubject<User> = new BehaviorSubject(null);
constructor(private http: HttpClient) {
}
setAppUser(user: User) {
this.appUser.next(user);
}
getAppUser() {
return this.appUser.asObservable();
}
我从我的一个组件中调用此行为主题。
现在它在不同的情况下工作和不工作。
如果我订阅这样的行为主题,它会起作用
export class AppNavComponent implements OnInit {
user: User;
constructor(private router: Router,
private authService: AuthService) { }
ngOnInit(): void {
this.authService.getAppUser()
.subscribe(user => this.user = user)
}
如果我想在订阅后执行多个语句,它就不起作用。
export class AppNavComponent implements OnInit {
user: User;
userCanViewAdmin: boolean = false;
constructor(private router: Router,
private authService: AuthService) { }
ngOnInit(): void {
this.authService.getAppUser()
.subscribe(user => {
this.user= user;
this.userCanViewAdmin= this.authService.getUserPermission(user, 'View Admin Page');
})
}
我真的不明白我在这里做错了什么。
任何帮助,将不胜感激。谢谢
解决方案
发现了问题伙计们,我愚蠢的没有意识到
错误出现在我的第二个陈述中。
this.userCanViewAdmin= this.authService.getUserPermission(user, 'View Admin Page');
最初,行为主体将我的用户设置为 null,并且此服务抛出错误,因为我的用户为 null。
如果用户为空,我只需要不调用上述服务。
谢谢昆汀·格里塞尔(Quentin Grisel)就我哪里出错了。
谢谢你们
推荐阅读
- python - 从没有任何库的文本中删除非单词
- java - 如何为在其中创建对象并将其传递给模拟对象的方法编写单元测试?
- c# - 如何使 Azure 中的 API 与服务通信?
- javascript - javascript 在另一个数组中查找嵌套对象并进行数学运算
- swift - 状态未更新
- c# - FixedPage XPS/PDF 内容不会填满页面
- node.js - Nodejs续集问题
- mysql - mysql。我如何 COUNT() 但在不同的列上插入不同的值?
- javascript - 使用 javascript/jquery 从先前输入的自动表单填充值
- python - 如何让机器人加入频道?