我正在使用forkJoin發出多個服務器請求。這是我通常在應用程序中使用的一種模式,它一直在運行良好。然而,我們剛剛開始實現在後端完成的用戶角色。我不確定實施角色的最佳做法是什麼,因爲我主要是前端開發人員,但這是我遇到的問題:Observable - 401導致forkJoin出錯
我們的應用程序具有成員和管理成員角色。
從每個視圖我必須調用成員和管理成員角色的後端,而不管角色是否在前端確定。
由於成員和管理員都擁有個人數據,所以會員數據總是返回給兩個角色。
僅當用戶是管理員時纔會返回管理員數據的請求。只要用戶沒有管理員權限,該請求就會返回401錯誤。這是我遇到問題的地方。
每當調用返回一個401錯誤的方法在我的訂閱方法被調用,我不訪問任何所做的包括相關的成員數據呼叫的呼叫。
在forkJoin中包含的代碼中,有五個調用傳入該方法。如果用戶是管理員,則第三次和第四次調用僅返回數據,而其餘的調用總是返回給成員或管理員。
當用戶不是管理員時,第三次調用返回401,流停止,並調用我的訂閱方法中的錯誤處理程序。這顯然不是我想要的。我希望這個流繼續下去,這樣我就可以在_data方法中使用這些數據。
我只使用RXJS 6個月,正在學習。也許我應該使用不同的模式,或者有辦法解決這個問題。任何幫助代碼示例將不勝感激。在我的代碼示例下面,我包含了另一個代碼示例,我試圖通過使用catch方法來解決問題。它沒有工作。
我查看get方法:
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'),
this.zonesService.getZoneAssociations(this.zone['id'], '/groupMembers'),
this.sitesService.getSite(this.zone['SiteId'])
);
})
.subscribe(
_data => {
// data handling...
},
_error => {
// error handling ...
}
);
}
我試圖修復:
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...
}
);
}
謝謝。這真棒,它完美運作。 – Aaron