es6/observable/ArrayLikeObservable.js
import { Observable } from '../Observable';
import { ScalarObservable } from './ScalarObservable';
import { EmptyObservable } from './EmptyObservable';
/**
* We need this JSDoc comment for affecting ESDoc.
* @extends {Ignored}
* @hide true
*/
export class ArrayLikeObservable extends Observable {
constructor(arrayLike, scheduler) {
super();
this.arrayLike = arrayLike;
this.scheduler = scheduler;
if (!scheduler && arrayLike.length === 1) {
this._isScalar = true;
this.value = arrayLike[0];
}
}
static create(arrayLike, scheduler) {
const length = arrayLike.length;
if (length === 0) {
return new EmptyObservable();
}
else if (length === 1) {
return new ScalarObservable(arrayLike[0], scheduler);
}
else {
return new ArrayLikeObservable(arrayLike, scheduler);
}
}
static dispatch(state) {
const { arrayLike, index, length, subscriber } = state;
if (subscriber.closed) {
return;
}
if (index >= length) {
subscriber.complete();
return;
}
subscriber.next(arrayLike[index]);
state.index = index + 1;
this.schedule(state);
}
_subscribe(subscriber) {
let index = 0;
const { arrayLike, scheduler } = this;
const length = arrayLike.length;
if (scheduler) {
return scheduler.schedule(ArrayLikeObservable.dispatch, 0, {
arrayLike, index, length, subscriber
});
}
else {
for (let i = 0; i < length && !subscriber.closed; i++) {
subscriber.next(arrayLike[i]);
}
subscriber.complete();
}
}
}
//# sourceMappingURL=ArrayLikeObservable.js.map