Dan*_*ima 7 rxjs angularjs angular2-services angular
我是Angular 2和Observables的新手,所以如果我的问题很简单,我会道歉.无论如何,我正在尝试使用RxJS测试Angular 2 HTTP客户端.虽然我让它工作,但我需要为我正在处理的服务添加更多逻辑.基本上我想要一个映射函数将我从我连接的Web服务接收的对象转换为我在Angular中的模型对象.
这是有效的代码:
import { Injectable } from 'angular2/core';
import { Http, Response } from 'angular2/http';
import { Observable } from 'rxjs/Observable';
import { Person } from '../models/person';
@Injectable()
export class PersonsService {
constructor(private http: Http) { }
private personsUrl = 'http://localhost/api/persons';
getPersons(): Observable<Person[]> {
return this.http.get(this.personsUrl)
.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);
}
let body = res.json();
return body.data || {};
}
private handleError(error: any) {
let errMsg = error.message;
return Observable.throw(errMsg);
}
}
Run Code Online (Sandbox Code Playgroud)
使用上面的代码我没有任何问题.我遇到的问题是,我想将我从服务中获得的对象映射到我在Angular中的对象,即Person.我尝试的是从extractData函数使用的.map函数中调用另一个函数.
private extractData(res: Response) {
if(res.status < 200 || res.status >= 300) {
throw new Error('Bad response status ' + res.status);
}
let body = res.json();
// map data function
var data = this.mapData(body.data);
return data || {};
}
private mapData(data: any) {
// code to map data
}
Run Code Online (Sandbox Code Playgroud)
显然上面的代码不起作用,因为在函数this内部引用时extractData,this不引用PersonsService类,但它引用了一个MapSubscriber对象.
我不知道是否可以调用"外部"功能.这可能是一个愚蠢的事情,但我找不到任何有关此事的信息.
Gün*_*uer 20
而不是仅仅传递function引用使用arrow函数来保留this
.map((res) => this.extractData(res))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4967 次 |
| 最近记录: |