Reputation: 157
I'm using RxJS here and I can't seem to get over this seemingly simple issue.
rx.Observable
.from([1,2,3,54,3,22,323,23,11,2])
.distinct()
.subscribe(function next (x) {
console.log('Next');
console.log(x);
}, function error (x) {
console.log('Error');
console.log(x);
}, function completed () {
console.log('Completed');
});
The above code spits out each array item in order as expected.
rx.Observable
.fromPromise(getNumbers([1,2,3,54,3,22,323,23,11,2]))
.distinct()
.subscribe(function next (x) {
console.log('Next');
console.log(x);
}, function error (x) {
console.log('Error');
console.log(x);
}, function completed () {
console.log('Completed');
});
function getNumbers (nums) {
return new Promise(function (resolve, reject) {
resolve(nums);
});
}
Here though I only get the full array (i.e. [ 1, 2, 3, 54, 3, 22, 323, 23, 11, 2 ]
). Shouldn't RxJS be breaking the result apart? I'd hope it at least had some logic for this.
Thank you
Upvotes: 12
Views: 13086
Reputation: 18663
No it will not break them apart implicitly. If you want to split them use flatMap
which will flatten the array:
rx.Observable
.fromPromise(getNumbers([1,2,3,54,3,22,323,23,11,2]))
.flatMap(function(x) { return x; })
.distinct()
.subscribe(function next (x) {
console.log('Next');
console.log(x);
}, function error (x) {
console.log('Error');
console.log(x);
}, function completed () {
console.log('Completed');
});
Upvotes: 24