【发布时间】:2020-12-10 15:11:43
【问题描述】:
我正在尝试使用 next 方法将从 API 返回的数据存储在行为主题中,我想在订阅 observable 之前执行此操作。
假设我有一个服务,它具有从 API 检索一些数据的功能:
getData(): Observable<Data> {
return this.http.get(APIURL);
}
现在,在订阅 getData() 之前,我想将 API 返回的内容保存在主题中。我设法用 tap() 运算符实现了这一点,但是通过阅读文档,tap 应该用于副作用,在这种情况下它看起来不像一个。 所以我所做的是这样的:
getData(): Observable<Data> {
return this.http.get(APIURL)
.pipe(tap(data => this.subject.next(data));
}
我这样做是为了获得某种缓存,这样我就不必再次调用 API 并在数据更新时对其进行一些操作。例如,假设我使用更新查询向该数据添加了一个元素,现在我可以更新存储在主题中的先前数据,因此一切都是最新的。只有刷新页面,我才会再次调用 API。
我不清楚的是 tap 运算符的使用,这样使用它是否可以,或者对于我正在尝试做的事情有更好的选择吗?
【问题讨论】:
-
我不完全理解这个问题。但是如果你想在没有订阅的情况下从 API 更新数据,那是不可能的。 Angular HttpClient 是一个独特的 observable,它在第一次通知后立即完成。因此,要保持前端更新,您要么需要一个计时器,以设定的时间间隔连续轮询后端,要么查看Server Sent Events。它们相当容易设置,旨在解决您可能面临的确切情况。
标签: angular rxjs angular-services