在服务中使用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;
}
答案 0 :(得分:5)
您可以在箭头函数中将整个调用包装到extractData
:
this.http.get("url")
.map(data => this.extractData(data))
.catch(err => this.handleError(err))
注意我对this.handleError
做了同样的事情。这项技术将在您通话期间保持对this
的引用。