Issue
This is a question asked in the RXJS Gitter channel but no one answers it so I post it here, hoping to have an explanation.
Hi everyone,
I am a Java developer who tries to learn rxjs. I have a dumb question about an
Observable
declaration. To make my life easier I told myself that working withObservable
is like working with the JavaStream
api (even ifStream
is a pull base model). The example that disturbes me is this one: In java I haveInteger[] intArray = new Integer[] {1, 2, 3, 4, 5}; Stream<Integer> stream = Arrays.stream(intArray); // Here we have a stream of Integer not a Stream of Integer[], the array is flatten
With rxjs if I do this:
const intArray = [1, 2, 3, 4, 5] const intObs: Observable<number> = of(intArray); // The compiler complains, I have to change Observable<number> to Observable<number[]>
It’s a bit disturbing, why the
of(...)
method does not flat the array?
Also, if we subscribe to an observable ofObservable<number[]>
why the received values are not of typenumber[]
but of typenumber
?
I am a bit confused. Thanks for some explanation
Solution
I don’t know anything about Java but in RxJS the generic type of Observable means what data type is this Observable going to emit (data type of each individual next
emission). So Observable<number>
means and Observable that emits only numbers. On the other hand Observable<number[]>
means an Observable that emits arrays of numbers.
In RxJS of()
only takes the value (or values) you pass as argument(s) and emits them as next
emissions. It doesn’t care what data type it is, no further logic is involved (what if you do want to emit an array of values of([1, 2, 3])
and of()
would keep flattenign them?).
In order to create an Observable from an array (an Observable that emits array items) you can use RxJS from()
method:
from([1, 2, 3]).subscribe(...); // Will receive 3 `next` values.
Answered By – martin
This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0