Get angular Observed stream as array

I have a list that should simulate a stream:

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

and I created Observable from this list:

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

And in the subscription method, I get the values ​​one by one. How should I wait until all the data is returned, and then to get the whole list. There is a take () statement, and after it the Observable should stop.

I do not want to put each value one by one in the array.

I am new here, not only for angular, but also for javascript.

+6
source share
3 answers

Have you tried to use the toArray operator?

 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/ rxjs@5.0.3 /dist/global/Rx.min.js"></script> 
+3
source

The scan statement should do what you want

 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

+3
source

I think this is a more suitable solution:

 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); 
+1
source

Source: https://habr.com/ru/post/1015103/


All Articles