import { Observable } from '../Observable';
|
import { SchedulerLike } from '../types';
|
|
export function scheduleArray<T>(input: ArrayLike<T>, scheduler: SchedulerLike) {
|
return new Observable<T>((subscriber) => {
|
// The current array index.
|
let i = 0;
|
// Start iterating over the array like on a schedule.
|
return scheduler.schedule(function () {
|
if (i === input.length) {
|
// If we have hit the end of the array like in the
|
// previous job, we can complete.
|
subscriber.complete();
|
} else {
|
// Otherwise let's next the value at the current index,
|
// then increment our index.
|
subscriber.next(input[i++]);
|
// If the last emission didn't cause us to close the subscriber
|
// (via take or some side effect), reschedule the job and we'll
|
// make another pass.
|
if (!subscriber.closed) {
|
this.schedule();
|
}
|
}
|
});
|
});
|
}
|