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