首页 > 解决方案 > 行为主题的订阅不适用于多重语句

问题描述

我有一个非常独特的问题。

我在我的服务中创建了一个行为主题

@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');
    })
  }

我真的不明白我在这里做错了什么。

任何帮助,将不胜感激。谢谢

标签: angularbehaviorsubject

解决方案


发现了问题伙计们,我愚蠢的没有意识到

错误出现在我的第二个陈述中。

this.userCanViewAdmin= this.authService.getUserPermission(user, 'View Admin Page');

最初,行为主体将我的用户设置为 null,并且此服务抛出错误,因为我的用户为 null。

如果用户为空,我只需要不调用上述服务。

谢谢昆汀·格里塞尔(Quentin Grisel)就我哪里出错了。

谢谢你们


推荐阅读