Оператор .take () не работает с Observables - PullRequest
0 голосов
/ 10 сентября 2018

Служба возвращает мне массив с 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 голосов
/ 10 сентября 2018

Согласно документам , оператор .take() делает это:

испускает только первые n предметов, излучаемых наблюдаемой

Если ваша служба не излучает 40 объектов один за другим, то take не является хорошим оператором для выполнения того, что вы хотите. Вероятно, вам нужен только нативный .slice() из javascript, который вы можете использовать для манипуляции с оператором 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();
    });
...