Я работаю над Portal в Angular 2. При входе я делаю запрос на сервер, чтобы получить зарегистрированный профиль пользователя. Метод для извлечения профиля пользователя возвращает наблюдаемый, который подписывается в 6 разных местах, когда приложение загружается.Обновить/перезагрузить последовательность Hot Observable с помощью RxJS
Если я использовал холодный наблюдаемый, это приведет к 6 вызовам API на сервер. Поэтому я переключился на горячий наблюдаемый, добавив .publishLast(). RefCount().
Это привело к единому запросу, совместно использующему данные, поскольку профиль пользователя не обновляется при последующих запросах.
Проблема начинается здесь:
Теперь у меня есть Редактировать функциональность Профиль которая обновляет профиль пользователя через 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. Это ломает поток, я пытаюсь с Темами, но пока не везет. –