我正在学习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) {
// ...
}
}
汽车.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);
}