首页 文章

Angular4 Rxjs Observable Limit后端HTTP请求

提问于
浏览
0

我试图限制我的应用程序中不必要的HTTP调用的数量,但每次我订阅一个Observable时,都会向服务器发出请求 . 有没有办法在不触发http请求的情况下订阅一个observable?我在服务中的观察看起来像这样:

getServices(): Observable<Service[]> {
    return this.http.get(this.serviceUrl).map(res => res.json())._catch(err => err);
}

然后在我的组件中,我订阅了这样的observable:

this.serviceService.getServices().subscribe(services => this.services = services);

我想要实现的是以某种方式将数据存储在服务本身上(这样我就可以在整个应用程序中使用该数据,而无需单独对每个组件发出请求,但我也想知道组件何时接收该数据(我通常按订阅做的) .

1 回答

  • 0

    不确定我是否正确理解了您的问题,但似乎您希望在服务中缓存第一个HTTP请求的结果,因此如果第一个组件获取数据,则第二个组件(另一个订户)将检索缓存的数据 . 如果是这种情况,请在模块级别声明服务提供者,以便Angular创建单个对象 . 然后在服务内部创建一个var,它在第一次检索后存储数据 .

    @Injectable()
    export class DataService{
    
        mydata: Array<string>[];
    
        constructor(private http:Http){}
    
        getServices(): Observable<string[]> {
            if (this.mydata){
                return Observable.from(this.mydata);  // return from cache
            } else
            {
                return return this.http.get(this.serviceUrl).map(res => res.json())._catch(err => err);
            }
        }
    }
    

相关问题