RxJS限制和返回响应结果数组的最佳方法

时间:2016-11-24 20:01:01

标签: arrays http angular rxjs reactive-programming

我使用Angular 2的http服务获取一些数据,API返回' n'结果数量,但我只想处理' x'量。

考虑到我无法访问API的端点(为了创建限制或查找一种方法),我试图找出处理数量的最佳方法结果将返回到调用我的HomeService" loadLatest"方法

使用此特定示例,响应是一个看起来像这样的对象:

{
 success: true,
 data: [Object, Object, Object],
 user: 'testUser'
}

我只对数据数组感兴趣(比如,只获取它包含的前两个对象)。

如果我想得到一个结果,我可以这样做:

import { Http, Headers } from '@angular/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';

const URL = 'http://exampleapi.com/example';

@Injectable()
export class HomeService {
 constructor(private _http: Http){}

 loadLatest() {
  return this._http.get(URL)
  .map(res => res.json())
  .map(({data}) => data[0]);
 }
}

它有效(这并不一定意味着它确实没问题)......但是,我知道必须有更好的方法才能返回,例如,前两个响应对象中数据数组中的对象。或者前三个,或者四个......或者我想要的多少。

我读过" take"方法,但我不相信它在这种情况下实际上会起作用......

这是我订阅它并使用我的组件中的服务的地方:

import { Component, OnInit } from '@angular/core';
import { HomeService } from './home.service';
import { Observable } from 'rxjs/Observable';

@Component({
 selector: 'home',
 templateUrl: './home.html'
})
export class HomeComponent implements OnInit {
 // I used this typing because I originally only wanted a single item
 // This might have to change
 items: Observable<Object>

 constructor(private homeService: HomeService){}

 ngOnInit() {
  this.homeService.loadLatest()
  .subscribe(result => this.items = result);
 }
}

正如你所看到的,我希望结果是一个包含两个对象的数组,我将它分配给this.items,这样我就可以使用angular&#39; s * ngFor迭代这两个对象。

任何帮助将不胜感激! 提前谢谢!

1 个答案:

答案 0 :(得分:5)

您可以在数据数组中使用slice方法。

loadLatest() {
  return this._http.get(URL)
  .map(res => res.json())
  .map(({data}) => data.slice(0,2));
}