我正在学习Angular 2,TypeScript,RxJs等,但是在使用RxJs和Observable返回服务内部的数据子集时遇到问题。
我希望下面的getCars函数读取一个json文件,对其进行解析并返回一部分数据(偏移量和计数)。但是,我总是会取回所有数据(我正在测试的文件中有200个实体/汽车)。
我究竟做错了什么?
实体服务
@Injectable()
export class EntityService {
constructor(private http: Http) { }
getCars(offset: number, count: number): Observable<Car[]> {
return this.http
.get('resources/data/cars.json')
.map(this.extractData)
.skip(offset)
.take(count)
.catch(this.handleError);
}
private extractData(res: Response) {
let body = res.json();
return body.data || {};
}
private handleError(error: any) {
// ...
}
}
cars.json
{
"data":[
{
"vin":"ee8a89d8",
"brand":"Fiat",
"year":1987,
"color":"Maroon"
},
{
"vin":"642b3edc",
"brand":"Renault",
"year":1968,
"color":"White"
}
]
}
实际上,您将始终使用此方法加载所有数据。在skip
和take
,如果你有在数据流中接收到的几件大事运营商只适用:
在您的情况下(一个HTTP请求),您只有一个:当您获取数据时。因此,如果要过滤数据,则需要使用其他map
运算符。像这样的东西:
getCars(offset: number, count: number): Observable<Car[]> {
return this.http
.get('resources/data/cars.json')
.map(this.extractData)
.map(data => {
return data.slice(offset, offset + count); // <----
})
.catch(this.handleError);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句