Angular 执行HTTP调用一次并缓存值,直到某些条件发生变化

Angular 执行HTTP调用一次并缓存值,直到某些条件发生变化,angular,rxjs,reactive-extensions-js,Angular,Rxjs,Reactive Extensions Js,我希望缓存特定Angular2 HTTP调用的结果(从服务器获取我的用户配置文件),我希望缓存在更新配置文件之前保持有效 这是我拥有的代码,它确实缓存了值,但从不更新它,即使配置文件发生了更改 readonly user$:Observable=this.http .get(`${this.baseUrl}/me`) .map(r=>r.json()) .publishLast() .refCount(); updateProfile(用户:用户):可观察{ 返回this.http.put(`t

我希望缓存特定Angular2 HTTP调用的结果(从服务器获取我的用户配置文件),我希望缓存在更新配置文件之前保持有效

这是我拥有的代码,它确实缓存了值,但从不更新它,即使配置文件发生了更改

readonly user$:Observable=this.http
.get(`${this.baseUrl}/me`)
.map(r=>r.json())
.publishLast()
.refCount();
updateProfile(用户:用户):可观察{
返回this.http.put(`this.baseUrl}/me`,user);
//使用用户值更新现有用户$-订阅
}

我希望配置文件使用传递给
updateProfile
user
值更新现有订阅。这可以用Rx-y的方式很好地完成吗,或者我必须使用
主题并手动更新吗?

我显然离答案只有几分钟的时间了。一个有效的解决方案似乎是为用户更新创建一个
主题

将该主题与HTTP observable合并(强制只执行一次)。然后,在更新时,将新的
user
值放入主题中。这将获得一个初始HTTP请求,然后是缓存响应

private readonly userSubject=new Subject();
只读用户$:Observable=this.userSubject
.merge(this.http
.get(`${this.baseUrl}/me`)
.map(r=>r.json())
.publishLast()
.refCount()
);
updateProfile(用户:用户):可观察{
返回this.http.put(`${this.baseUrl}/me`,用户)
.map(r=>r.json())
.do(()=>this.userSubject.next(user));
}

任何更优雅的方法都将不胜感激。:)

我显然离答案只有几分钟了。一个有效的解决方案似乎是为用户更新创建一个
主题

将该主题与HTTP observable合并(强制只执行一次)。然后,在更新时,将新的
user
值放入主题中。这将获得一个初始HTTP请求,然后是缓存响应

private readonly userSubject=new Subject();
只读用户$:Observable=this.userSubject
.merge(this.http
.get(`${this.baseUrl}/me`)
.map(r=>r.json())
.publishLast()
.refCount()
);
updateProfile(用户:用户):可观察{
返回this.http.put(`${this.baseUrl}/me`,用户)
.map(r=>r.json())
.do(()=>this.userSubject.next(user));
}
任何更优雅的方法都将不胜感激。:)