angular - 将 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 之外使用那些检索到的值?
解决方案
你可以做这样的事情
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
为学生的名字。
推荐阅读
- google-cloud-platform - 使用 GCP API Gateway 前端具有私有入口的 Cloud Run 后端
- scala - 从 scala while 循环返回非单位值
- discord - 使用 discord.js 使用 awaitMessage 获取两个不同的元素
- c++ - 为什么在我的代码中通过函数打印指针时直接给出不同的结果?
- angular - 使用 BrightCove Player Loader 的角度问题
- reactjs - 有没有办法为 expo-av 视频制作自定义控件组件?
- google-apps-script - 你能解释一下为什么我会收到这个错误:Unexpected error while getting the method or property getContacts on object ContactsApp
- java - 我可以在 jboss EAP 7.3 容器中直接包含相关的 jar 文件吗?
- bash - 如何通过中间计算机进行 scp
- javascript - 文本输入未触发更改事件