【发布时间】:2021-07-22 16:35:59
【问题描述】:
从服务订阅对象时,我在组件中得到一个空数组。 我使用了主题行为并尝试将数据从主题传递到组件,但在组件上返回一个空数组。
服务:-
allPassedData: BehaviorSubject<any> = new BehaviorSubject<any>([]);
searchDepartments() {
const fetchData3 = this.db.todos.orderBy('department').keys((departments) => {
alert("Departments are: " + departments.join(','));
console.log(departments); //<============== ["data","accounts"]
console.log(typeof departments); //<========== object
this.allPassedData.next(departments);
});
}
getDep(): Observable<any[]> {
return this.allPassedData.asObservable();
}
组件
showTable() {
this.todoService.getDep().subscribe((departments)=>{
this.showDepartments = departments;
console.log(this.showDepartments); <=============== [] empty
})
【问题讨论】:
-
你也应该订阅
searchDepartments,否则它不会做任何事情。此外,您正在使用带有空数组初始值的BehaviorSubject,这就是您在日志中看到的内容 -
@PoulKruijt 我应该在初始时传递什么而不是空数组?据我所知
BehaviorSubject首先取初始值,但在这里我该怎么办? -
A
ReplaySubject(1)最适合这个。然而,为什么会有searchDepartments、getDep和allPassedData有点令人困惑。感觉这样的都可以合二为一 -
@PoulKruijt 好的,我将与
ReplaySubject(1)联系,尽管目前我已经通过 Promise 解决了这个问题。我在下面添加了我的答案 -
混合promise 和observables 有点反模式,而且如果你使用其中一个也没关系。这同样适用于
subscribe
标签: angular rxjs behaviorsubject