.take() 运算符不适用于 Observables
.take() operator is not working on the Observables
服务 returns 我有一个包含 40 个对象的数组,但我的应用程序只需要前 5 个对象。我做了一些研究,发现适合这种情况的运算符是 Take,但它什么也没做:当我调用该服务时,它 returns 我所有的 40 个元素。
我做错了什么?
服务中:
getData(valueS): Observable<any> {
return Observable.from(
this.http.get<any>(`${this.URL}`)
);
}
在我的组件中:
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();
});
根据 docs,.take()
运算符这样做:
emit only the first n items emitted by an Observable
除非您的服务正在一个接一个地发出 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();
});
服务 returns 我有一个包含 40 个对象的数组,但我的应用程序只需要前 5 个对象。我做了一些研究,发现适合这种情况的运算符是 Take,但它什么也没做:当我调用该服务时,它 returns 我所有的 40 个元素。
我做错了什么?
服务中:
getData(valueS): Observable<any> {
return Observable.from(
this.http.get<any>(`${this.URL}`)
);
}
在我的组件中:
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();
});
根据 docs,.take()
运算符这样做:
emit only the first n items emitted by an Observable
除非您的服务正在一个接一个地发出 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();
});