Javascript Angular4 Rxjs可观测限制后端HTTP请求

Javascript Angular4 Rxjs可观测限制后端HTTP请求,javascript,angular,http,rxjs,Javascript,Angular,Http,Rxjs,我试图限制我的应用程序中不必要的HTTP调用的数量,但每次我订阅一个可观察的应用程序时,都会向服务器发出请求。有没有一种方法可以在不触发http请求的情况下订阅observable?我在服务中的观察结果如下: getServices(): Observable<Service[]> { return this.http.get(this.serviceUrl).map(res => res.json())._catch(err => err); } getSer

我试图限制我的应用程序中不必要的HTTP调用的数量,但每次我订阅一个可观察的应用程序时,都会向服务器发出请求。有没有一种方法可以在不触发http请求的情况下订阅observable?我在服务中的观察结果如下:

getServices(): Observable<Service[]> {
    return this.http.get(this.serviceUrl).map(res => res.json())._catch(err => err);
}
getServices():可观察{
返回this.http.get(this.serviceUrl).map(res=>res.json())。\u catch(err=>err);
}
然后在我的组件中,我同意如下所示的可观察性:

this.serviceService.getServices().subscribe(服务=>this.services=services)


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

不确定我是否正确理解了您的问题,但您似乎希望在服务中缓存第一个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);
        }
    }
}
@Injectable()
导出类数据服务{
mydata:Array[];
构造函数(私有http:http){}
getServices():可观察{
if(this.mydata){
return Observable.from(this.mydata);//从缓存返回
}否则
{
返回this.http.get(this.serviceUrl.map(res=>res.json())。\u catch(err=>err);
}
}
}

…只是不调用触发请求的函数?我订阅它是因为我需要它提供的相同数据…现在我创建了一个解决方案,将“this.services”放在主题中,并创建了一个可观察的sbuject。