angular - 如何访问块外行为主体的订阅块变量
问题描述
我正在使用行为主题并在 ts 文件中订阅它。
试图访问 ts 文件中主题块之外的变量..
service.ts 的代码
private messageSource = new BehaviorSubject<any>(null);
constructor(
private apiService: ApiService
) {
}
// try
sendMessage(value: any) {
this.messageSource.next(value);
}
get getMessage() {
return this.messageSource.asObservable();
}```
now in TS file
ngOnInit() {
// this.viewUser = this.commonService.getMessage;
this.subscription = this.commonService.getMessage.subscribe(value => {
this.viewUser = value;
console.log(this.viewUser)
});
console.log(this.viewUser)
}
文件控制台显示数据..但在第二个控制台中,它显示了行为主题的初始值,即。null 如何获取块外的数据
解决方案
你里面的东西subscribe
是异步运行的。
this.subscription = this.commonService.getMessage.subscribe(value => {
this.viewUser = value;
console.log(this.viewUser)
});
console.log(this.viewUser) // <-- This is running before what's inside subscribe
您可以使用async
await
使函数 async 和 sync 内部的内容:
this.viewUser = await this.commonService.getMessage.asPromise();
包含此代码的函数应该是async
.
推荐阅读
- c# - 为什么 LINQ orderby 会消耗更多内存?
- wordpress - Group by,Order by 在 MySQL 但不是 MariaDB
- xamarin.ios - Xamarin.iOS:Google 广告未在我的设备上显示
- github - 如何将 index.html 移动到 Github 的分支 gh-pages 的顶部?
- python - 将数组展平为列表列表
- android - Firebase 身份验证未发送短信
- c# - 追踪止损在 C# 中无法正常运行 - 我使用的列表是否错误?
- c# - 在 C# 中将二进制 (64) SQL Server 数据解析为纯文本
- javascript - AngularJS 指令验证
- python - 如何验证 Django REST Framework 序列化程序中的所有相关字段是否指定具有相同所有者的对象?