multitude
Version:
Comprehensive streams for push and pull
39 lines (36 loc) • 967 B
JavaScript
import { Observable } from "../classes/Observable.js";
import { TypeGuard } from 'type-core';
export function interval(every) {
var options = !every || TypeGuard.isNumber(every) ? {
every
} : every;
var cancel = options.cancel;
var promise = TypeGuard.isPromiseLike(cancel) ? cancel : null;
var callback = TypeGuard.isFunction(cancel) ? cancel : null;
return new Observable(obs => {
var index = -1;
var interval = setInterval(() => {
index++;
obs.next(index);
if (!callback) return;
try {
if (callback(index)) {
obs.complete();
clearInterval(interval);
}
} catch (err) {
obs.error(err);
}
}, options.every || 0);
if (promise) {
promise.then(() => {
clearInterval(interval);
obs.complete();
}, err => {
clearInterval(interval);
obs.error(err);
});
}
return () => clearInterval(interval);
});
}