.take()运算符未在Observable上运行

时间:2018-09-10 08:47:22

标签: angular6 rxjs6

该服务返回了一个包含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();
        });

1 个答案:

答案 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();
    });