我有一个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);
});

10-06 00:51