Javascript 可观察-401导致forkJoin出错
我正在使用forkJoin发出几个服务器请求。这是我在整个应用程序中经常使用的一种模式,它一直非常有效。然而,我们刚刚开始实现在后端完成的用户角色。我不确定实现角色的最佳实践是什么,因为我主要是一名前端开发人员,尽管如此,这是我遇到的问题: 我们的应用程序具有成员和管理成员角色Javascript 可观察-401导致forkJoin出错,javascript,angular,rxjs,observable,fork-join,Javascript,Angular,Rxjs,Observable,Fork Join,我正在使用forkJoin发出几个服务器请求。这是我在整个应用程序中经常使用的一种模式,它一直非常有效。然而,我们刚刚开始实现在后端完成的用户角色。我不确定实现角色的最佳实践是什么,因为我主要是一名前端开发人员,尽管如此,这是我遇到的问题: 我们的应用程序具有成员和管理成员角色 从每个视图中,我都必须为成员和管理员成员角色调用后端,因为角色不是在前端确定的 始终为两个角色返回成员数据,因为成员和管理员成员都有个人数据 只有当用户是管理员时,才会返回对管理员数据的请求。只要用户没有管理员权限,请求
返回
Observable.throw
将重新显示捕获的错误,这将看到forkJoin
发出错误
相反,您可以使用Observable.of(null)
发出null
,然后完成,这将看到forkJoin
发出错误的可观察对象发出null
:
return Observable.forkJoin(
this.teamsService.getTeam(this.zone['TeamId']),
this.zonesService.getZoneAssociations(this.zone['id'], '/myDevices'),
this.zonesService.getZoneAssociations(this.zone['id'], '/devices')
.catch(error => Observable.of(null)),
this.zonesService.getZoneAssociations(this.zone['id'], '/groupMembers')
.catch(error => Observable.of(null)),
this.sitesService.getSite(this.zone['SiteId'])
);
或者,如果您想将错误作为一个值发出,您可以使用
Observable.of(error)
谢谢。这是一个很棒的答案,你应该得到更多的分数。
private getZone() {
this.spinner.show();
this.zonesService.getZone(this.zoneId)
.map(response => {
this.zone = response['group'];
return this.zone;
})
.flatMap(() => {
return Observable.forkJoin(
this.teamsService.getTeam(this.zone['TeamId']),
this.zonesService.getZoneAssociations(this.zone['id'], '/myDevices'),
this.zonesService.getZoneAssociations(this.zone['id'], '/devices')
.catch(error => Observable.throw(error)),
this.zonesService.getZoneAssociations(this.zone['id'], '/groupMembers')
.catch(error => Observable.throw(error)),
this.sitesService.getSite(this.zone['SiteId'])
);
})
.subscribe(
_data => {
// data handling...
},
_error => {
// error handling...
}
);
}
return Observable.forkJoin(
this.teamsService.getTeam(this.zone['TeamId']),
this.zonesService.getZoneAssociations(this.zone['id'], '/myDevices'),
this.zonesService.getZoneAssociations(this.zone['id'], '/devices')
.catch(error => Observable.of(null)),
this.zonesService.getZoneAssociations(this.zone['id'], '/groupMembers')
.catch(error => Observable.of(null)),
this.sitesService.getSite(this.zone['SiteId'])
);