30

Basically I'm trying to inflate BehaviorSubject<[]> with array of data which will be loaded in chunks.

BehaviorSubject<[]> will be added with new chunk of data (like Array.push) but I don't want to use another array to store and add to BehaviorSubject.next because this will cause rendering to take too long as the data grow over time.

Any suggestion?

Reddy
  • 1,403
  • 3
  • 14
  • 27

2 Answers2

54

You can use getValue() method to achieve what you want to do.

Example:

data = new BehaviorSubject<any[]>([]);

addData(foo:any):void{
  // I'm using concat here to avoid using an intermediate array (push doesn't return the result array, concat does).
  this.data.next(this.data.getValue().concat([foo]));
}
Supamiu
  • 8,501
  • 7
  • 42
  • 76
29

Instead of using concat, you can instead use the spread operator:

data = new BehaviorSubject<any[]>([]);

addData(foo: any): void {
  this.data.next([...this.data.getValue(), ...foo])
}

I've found this to be a bit more readable than a straight concat

TheHanna
  • 496
  • 5
  • 9