2017-02-19 7 views
6

Mam listy, które powinny symulować strumienia:Get kątową obserwowalnych strumień jako tablicy

list = [ 
    {name : 'Str1', age: 10}, 
    {name : 'Str2', age: 10}, 
    {name : 'Str3', age: 10} 
]; 

a ja stworzył Observable z tej listy:

Observable.from(this.list).skip(this.currentPage * this.pageSize).take(this.pageSize).subscribe(data => this.pagerList = data, console.error); 

aw subskrybować Metoda otrzymuję wartości jeden po drugim. Jak mam poczekać na zwrócenie wszystkich danych, a potem na całą listę. Jest operator take(), a po nim obserwowalne muszą się zatrzymać.

Nie chcę umieszczać każdej wartości pojedynczo w tablicy.

Jestem nowy tutaj, nie tylko dla kanciastych, ale także dla javascriptu.

Odpowiedz

3

Czy próbowałeś użyć toArray operatora ?.

let list = [ 
 
    { name: 'Str1', age: 10 }, 
 
    { name: 'Str2', age: 10 }, 
 
    { name: 'Str3', age: 10 }, 
 
    { name: 'Str4', age: 10 }, 
 
    { name: 'Str5', age: 10 }, 
 
    { name: 'Str6', age: 10 } 
 
]; 
 

 
let currentPage = 2; 
 
let pageSize = 2; 
 

 
Rx.Observable.from(list) 
 
    .skip(currentPage * pageSize) 
 
    .take(pageSize) 
 
    .toArray() 
 
    .subscribe(data => console.log(data), console.error);
<script src="https://npmcdn.com/@reactivex/[email protected]/dist/global/Rx.min.js"></script>

+0

Dziękuję. Ten działa świetnie. – makkasi

3

Operator scan powinien robić to, co chcesz

Observable.from(this.list) 
.skip(this.currentPage * this.pageSize) 
.take(this.pageSize) 
.scan([], acc, curr) => {acc.push(curr); return acc;}); 
.subscribe(data => this.pagerList = data, console.error); 

http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-scan

+1

http://rxmarbles.com/#scan to jak zmniejszyć, ale po otrzymaniu wyniku. Dziękuję za Twoją odpowiedź. – makkasi

+1

Z 'scan'you uzyskasz zaktualizowaną tablicę po każdym zdarzeniu iz' toArray' otrzymujesz tylko jedną tablicę na końcu, gdy obserwowalna się zakończy. –

1

myślę, że to jest bardziej odpowiednie rozwiązanie:

Observable.of(this.list).map(x => x.slice(this.currentPage * this.pageSize)).map(x => x.slice(0, this.pageSize)).subscribe(data => this.pagerList = data, console.error); 
+0

Nie rozumiem tego. W pierwszej funkcji mapy dostajesz obiekt. Jak możesz kroić obiekt? – makkasi

+2

'Observable.of (this.list)' tworzy sekwencję jednego elementu, którego typem jest tablica, 'map' stosuje się do obserwowalnej wartości, w tym przypadku jest to tablica. – kemsky

Powiązane problemy