在这种效果下,我将采取包含类似的对象的操作有效载荷
{
firms: [{ id: 1, firmName: 'string', roles: ['admin', 'supadmin', 'user'] }],
type: "loadFolder",
userId: 1
};
对于角色数组中的每个字符串,以及操作负载中的userId,我必须执行httpCall,将其作为参数传递,然后我需要根据角色填充三个不同的列表(userList、adminLIst和supadminList(。我找不到解决办法。
loadFolder$ = createEffect(() => {
return this.action$.pipe(
ofType(SidebarAction.loadFirmSuccess),
switchMap(action => {
let roles: Array < string > = [];
let supadminlist = [];
let adminList = [];
let userList = [];
action.firms.map(
firm => {
firm.roles.map((role: string) => {
roles.push(role);
});
}
);
roles.forEach(role => {
this.sidebarService.getFolders(action.userId, role).subscribe(res => {
switch (role) {
case ('supadmin'):
supadminlist = res;
break;
case ('admin'):
adminList = res;
break;
case ('user'):
userList = res;
}
});
});
return sidebarAction.loadFoldersSuccess({supadmin, adminList, userList});
}),
);
});
我试着用这种方式。。。我不知道如何实现这个,这个解决方案不起作用
在http调用完成之前返回loadFoldersSuccess
操作。使用forkJoin
进行http调用,然后返回loadFoldersSuccess
。
const a = {}
roles.forEach(role => {
a[role] = this.sidebarService.getFolders(action.userId, role)
});
return forkJoin(a).pipe(map(x => {
return sidebarAction.loadFoldersSuccess(x);
}));