4
我正在Angular 2中的Portal上工作。登錄時,我向服務器發出請求以獲取登錄的用戶配置文件。提取用戶配置文件的方法將返回一個在應用程序加載時在6個不同位置預訂的observable。使用RxJS刷新/重新加載Hot Observable序列
如果我用了一個寒冷的觀察到的,這會導致6 API調用到服務器。所以我通過添加.publishLast()。refCount()來切換到一個熱門的observable。
這導致了一個請求共享數據,因爲用戶的個人資料不會在後續請求更新。
問題從這裏開始:
現在我有一個編輯個人資料功能,它通過HTTP PUT和作爲一個結果更新用戶配置文件,我想到期之前訂閱觀測量並以某種方式觸發該序列再次使API再次執行,並且訂閱接收更新的數據。
有沒有一些方法,我可以重新啓動/重新觸發一個已經訂閱可觀察序列?
下面是獲取用戶可觀察
fetch(){
this.userObservable = Observable.fromPromise(this.getToken())
.switchMap(token => {
let headers = new Headers();
headers.append('Authorization', `Bearer ${token}`);
return this.http.get('/api/v1/admin/users/me?includes=role', {headers: headers})
})
.map((res: Response) => {
let retVal: any = {
data: new Deserializer({
keyForAttribute: 'camelCase'
}).deserialize(res.json())
};
this.user = retVal.data as MpUser;
this.user.role = MpRoles[retVal.data.role[0].name];
return this.user;
})
.publishLast()
.refCount();
}
恐怕這不起作用,因爲令牌在超時後會刷新。我們使用Keycloak SSO進行身份驗證。 –
@Mohammad Umair Khan,檢查答案 –
BehaviorSubject將在第一次訂閱時返回初始化值,而不是等待API調用完成。這是打破流動,我想與主題,但沒有運氣呢。 –