在angular服务中缓存rest请求
我用的是角度6, 我有一个名为“UserService”的服务,它有一个名为“getUserInfo()”的方法,该方法从服务器获取用户的一些数据并保存它们。在angular服务中缓存rest请求,angular,Angular,我用的是角度6, 我有一个名为“UserService”的服务,它有一个名为“getUserInfo()”的方法,该方法从服务器获取用户的一些数据并保存它们。 有几个组件调用此方法,但我希望我的服务第一次发出HTTP请求,因为它没有用户信息,对于其他“getUserInfo()”调用,它应该提供已经从服务器获取的数据 实现这一点的最佳实践是什么?您只需将信息保存在服务的属性中,并在可用时提供它。看看下面的代码 import { Restangular } from 'ngx-restangula
有几个组件调用此方法,但我希望我的服务第一次发出HTTP请求,因为它没有用户信息,对于其他“getUserInfo()”调用,它应该提供已经从服务器获取的数据
实现这一点的最佳实践是什么?您只需将信息保存在服务的属性中,并在可用时提供它。看看下面的代码
import { Restangular } from 'ngx-restangular';
import { of } from 'rxjs';
export interface UserInfo {
name: string;
email: string;
}
@Injectable({
providedIn: 'root' // for angular 6
})
export class UserService
userInfo: UserInfo;
constructor(private: rest: Restangular) {}
getUserInfo(): Observable<UserInfo> {
if (this.userInfo) {
return of(this.userInfo);
}
return this.rest
.one('/userInfo/')
.get()
.pipe(
map<UserInfo, UserInfo>(data => {
this.userInfo = data;
return data;
})
);
}
}
下次发布你到目前为止所做的事情。我们能为您做些什么?不管怎样,用防护装置来做。当组件执行http调用时,您还可以检查保存的对象中是否存储了用户信息。如果有,执行请求的函数将发出一个空的可观察值。如果没有,服务将进行调用,您将信息存储在此对象中。有一些方法可以做到这一点。例如,使用公共变量或行为子对象。如果你需要一个示例代码,请告诉我。
return new Observable(observer => {
observer.next(this.userInfo);
observer.complete();
return { unsubscribe() {} };
});