Angular 2:如何引用Observable map调用的函数内的类变量

时间:2016-04-19 03:48:11

标签: javascript typescript angular

在服务中使用Observable的Angular 2应用中,如何在map内引用该类的私有字段?如下面的代码所示,我们如何在this._dataStore函数中引用extractData?谢谢!

请注意,我确实看到this question建议将函数体放在() => {function body here}内,但我真的希望能够调用该函数,尤其是可能会使用此逻辑在其他地方(不要复制并粘贴到所有地方。)

@Injectable()
export class DataService{
  constructor(private http: Http){}
  private _dataStore = [];

  getData(): Observable<any> {
    if(this._dataStore.length > 0) { //return cached data
      return Observable.of(this._dataStore);
    } else {
      return this.http.get('url')
                   .map(this.extractData)
                   .catch(this.handleError);
    }
  }

  private extractData(res: Response){
    if(res.status < 200 || res.status >= 300){
      throw new Error('Bad response status '+ res.status);
    }
    var data = res.json();
    for (var i in data['items']){
      this._dataStore.push(data['items'][i]); //ERROR this._dataStore undefined
    }
    return this._dataStore;
  }

1 个答案:

答案 0 :(得分:5)

您可以在箭头函数中将整个调用包装到extractData

this.http.get("url")
         .map(data => this.extractData(data))
         .catch(err => this.handleError(err))

注意我对this.handleError做了同样的事情。这项技术将在您通话期间保持对this的引用。