首页 > 解决方案 > 将 observable 转换为变量

问题描述

我正在通过observable invalueChanges方法从 firebase 检索一些数据。

this.authService.getUser().subscribe(
      user => {
        this.studentDetailsService.readStudentDatabase( user.uid ).subscribe( temp => {
          this.student = temp as StudentDetails ;
        });
      }
    );

但我不能this.student像这样使用 Observable 之外的对象

this.authService.getUser().subscribe(
      user => {
        this.studentDetailsService.readStudentDatabase( user.uid ).subscribe( temp => {
          this.student = temp as StudentDetails ;
        });
      }
    );

    this.name = this.student.firstName;

当我做这个控制台显示this.name是未定义的。

如何解决这个问题?我如何在 observable 之外使用那些检索到的值?

标签: angularobservable

解决方案


你可以做这样的事情

studenDetails$ = this.authService.getUser().pipe(
  switchMap(user => 
     this.studentDetailsService.readStudentDatabase(user.id)));

然后,您可以使用异步管道而不是使用订阅在模板中输出学生详细信息。

{{ studenDetails$ | async | json }}

您可以执行以下操作,但我建议您改用上述解决方案

this.authService.getUser().pipe(
  switchMap(user => 
     this.studentDetailsService.readStudentDatabase(user.id).pipe(
       tap(student => this.student = student),
       map(student => student.firstName),
       tap(firstName => this.firstName = firstName))).subscribe();

这会将班级字段设置firstName为学生的名字。


推荐阅读