该服务返回了一个包含40个对象的数组,但我的应用程序中需要的只是前5个。我进行了一些研究,发现适合这种情况的运算符是Take,但它不起作用任何东西:当我致电服务时,它会返回我所有的40个元素。
我在做什么错了?
在服务中
getData(valueS): Observable<any> {
return Observable.from(
this.http.get<any>(`${this.URL}`)
);
}
在组件的ts中:
this.dataService.getData(this.valueSelected)
.pipe(
delay(1000),
take(5)
)
.subscribe((res: any) => {
this.dataContainer = res.main;
console.log(res);
console.log(this.dataContainer);
this.buildWidget();
});
答案 0 :(得分:1)
根据docs,.take()
运算符执行以下操作:
仅发射Observable发出的前n个项目
除非您的服务逐个发出40个对象,否则take
并不是执行所需操作的好操作者。您可能需要的只是来自JavaScript的原生.slice()
,您可以使用Observable的.map()
运算符对其进行操作:
this.dataService.getData(this.valueSelected)
.pipe(
delay(1000),
map(arr=>arr.slice(0,5))//take the first five elements
)
.subscribe((res: any) => {
this.dataContainer = res.main;
console.log(res);
console.log(this.dataContainer);
this.buildWidget();
});