你好我是角度和火力的新手,并一直在网上看,但没有一个解决方案适合我,希望有人可以提供帮助。 (如果我没有使用正确的术语,我可以澄清,如果你问,就像我说我是新来的。)谢谢。
我试图将数据保存到异步函数中的变量中。当我尝试订阅它时,我收到此错误:
/////////////////////////////////////////////
ERROR TypeError: Cannot read property 'subscribe' of undefined
at EmployeeListComponent.ngOnInit (employee-list.component.ts:17)
会发生什么:
Observable<Employee>;
的变量中
constructor(public afStore: AngularFirestore, private authService:
AuthService) {
this.authService.afAuth.authState.subscribe(user => {
this.employeeList = this.afStore.collection<Employee>('restaurantUsers/' + user.uid +
'/employees');
return this.employees = this.employeeList.valueChanges();
});
}
getData()
的方法返回数据
getData(): Observable<Employee[]> {
return this.employees;
}
export class EmployeeListComponent implements OnInit {
constructor(private employeeService: EmployeeService, private authService: AuthService) {
}
ngOnInit() {
this.employeeService.getData().subscribe(data => {
console.log(data);
});
}
来自我的employee-listComponent -
@Injectable()
export class EmployeeService {
employeeList: AngularFirestoreCollection<Employee>;
employees: Observable<Employee[]>;
selectedEmployee: Observable<Employee[]>;
constructor(public afStore: AngularFirestore, private authService: AuthService) {
this.authService.afAuth.authState.subscribe(user => {
this.employeeList =`enter code here` this.afStore.collection<Employee>('restaurantUsers/' + user.uid + '/employees');
return this.employees = this.employeeList.valueChanges();
});
}
getData(): Observable<Employee[]> {
return this.employees;
}
//////////////////////////////////////////////////////////////
export class EmployeeListComponent implements OnInit {
constructor(private employeeService: EmployeeService, private authService: AuthService) {
}
ngOnInit() {
this.employeeService.getData().subscribe(data => {
console.log(data);
});
}
**/////////////////////////////////////////////
ERROR TypeError: Cannot read property 'subscribe' of undefined
at EmployeeListComponent.ngOnInit (employee-list.component.ts:17)**
这是因为在你的异步请求完成之前,this.employees
在undefined
中是EmployeeService
。您需要将其初始化为流并将记录从服务器返回时将其推送到该流。最简单的方法是使用Subject
并将其设置为重播任何后期订阅者的最后一个值。
根据您在这里要完成的工作,可能有一种更好的方法来解决您的问题,而不是保留这些记录。