我有一个partnersservice,它位于从服务器加载partners数组的构造函数列表中。
this.partners = this._http.get('/app/partners/partners.data.json')
.map(this.extractData)
.catch(this.handleError);
当我得到一份合作伙伴名单时,一切都好。
但我需要通过身份证找到搭档。
在本例中,我使用带回调的函数
getPartner(id:number, callback:(partner:Partner)=>void):void {
this.partners.subscribe(partners=> {
for (let partner of partners) {
if (partner.id == id) {
callback(partner);
}
}
});
}
在浏览器控制台中,我看到每当调用
subscribe
时,angular2都会向服务器发送请求。我可以做点什么,不发任何请求吗?也许有更好的方法来创建getPartner()
函数(没有回调)? 最佳答案
你可以试试这样的方法:
getPartners() {
if (this.partners) {
return Observable.of(this.partners);
} else {
return this._http.get('/app/partners/partners.data.json')
.map(this.extractData)
.catch(this.handleError)
.do(partners => {
this.partners = partners;
});
}
}
getPartner(id:number):Observable<partner> {
this.getPartners().map(partners => {
return partners.find(partner => (partner.id == id));
});
}
并以这种方式执行该方法:
this.service.getPartner('some id').subscribe(partner => {
console.log(partner);
});