我创建了一个演示(ng-run),其中有一个按钮,可以调用Http请求。
当按钮被点击时,我会调用这个方法:
public getData(){
this._jokeService.getData().subscribe();
}
接着从服务中调用这个函数:
public getData() {
return this.http.get(API_ENDPOINT).pipe(shareReplay(1))
}
问题在于每次点击时,我仍会看到一个新的HTTP请求被启动:
问题:
为什么shareReplay不会保留响应的最后一个值?
我该如何让我的代码只调用一次http并将该值保存供未来的订阅使用?
编辑: 解决方案在这里
http.get
!shareReplay
防止返回的可观察对象的附加订阅者触发新的响应,但是每次都会创建一个新的可观察对象。如果您想只进行一次请求并将现有值暴露给将来的订阅者,请使用我在此处显示的ReplaySubject
:https://dev59.com/cFgR5IYBdhLWcg3wO7U0#41554338。然后,您可以区分触发新请求和请求现有值,而且如果确实需要进行额外的请求,则所有现有的订阅者在可用时都会收到新的结果。 - jonrsharpeReplaySubject
来保存这些值。我个人认为 - 它可以在没有它的情况下完成。 - Royi Namir