簡體   English   中英

Angular 2:如何引用Observable map調用的函數內的類變量

[英]Angular 2 : how to refer to a class variable inside a function called by Observable map

在服務中使用Observable的Angular 2應用程序中,如何在map引用類的私有字段? 如下面的代碼所示,我們怎么可以參考this._dataStore里面extractData功能? 謝謝!

請注意,我確實看到這個問題建議將函數體放在() => {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;
  }

您可以在arrow函數extractData的整個調用包裝起來:

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

注意我對this.handleError做了同樣的this.handleError 這項技術將在您通話期間保持您this的參考。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM