问题描述
export const selectActivePracticeUsersListSnapshot = pipe(
select(selectPracticeUsersList),filter((users) => !!users),take(1),map((users) => users.filter((user) => user.active))
);
public getTeamMembersWithAccess(permission: string): string[] {
let flagAvatars: string[];
this.store.dispatch(loadUsers());
this.store.pipe(selectActivePracticeUsersListSnapshot).subscribe((activePracticeUsers) => {
flagAvatars = activePracticeUsers.reduce((teamMembers,activeUser) => {
if (!!activeUser.permissions[permission]) {
const { firstName,lastName } = activeUser;
return [...teamMembers,`${firstName} ${lastName}`];
}
return teamMembers;
},[]);
});
return flagAvatars;
}
我从组件中这样称呼它:
constructor(private helperService: HelperService) {
const flagAvatars = this.helperService.getTeamMembersWithAccess('AdminPage');
}
我的问题是,由于 let flagAvatars:string []; ,服务方法返回未定义的结果,因为对存储选择器的预订正在等待 loadUsers( )完成。我知道我需要更改 getTeamMembersWithAccess()方法以某种方式返回 Observable
解决方法
您的陈述完全正确,我将帮助您使其具体化。
尝试一下:
服务:
import { map } from 'rxjs/operators';
......
public getTeamMembersWithAccess(permission: string): Observable<string[]> {
this.store.dispatch(loadUsers());
this.store.pipe(selectActivePracticeUsersListSnapshot).pipe(
map((activePracticeUsers) => {
// flagAvatars equals this,so let's just return it right away in the map
return activePracticeUsers.reduce((teamMembers,activeUser) => {
if (!!activeUser.permissions[permission]) {
const { firstName,lastName } = activeUser;
return [...teamMembers,`${firstName} ${lastName}`];
}
return teamMembers;
},[]);
});
)
}
要消耗它:
this.helperService.getTeamMembersWithAccess('AdminPage').subscribe(data => {
console.log(data);
});