import { Subscription } from '../Subscription';
|
import { SchedulerAction, SchedulerLike } from '../types';
|
|
export function executeSchedule(
|
parentSubscription: Subscription,
|
scheduler: SchedulerLike,
|
work: () => void,
|
delay: number,
|
repeat: true
|
): void;
|
export function executeSchedule(
|
parentSubscription: Subscription,
|
scheduler: SchedulerLike,
|
work: () => void,
|
delay?: number,
|
repeat?: false
|
): Subscription;
|
|
export function executeSchedule(
|
parentSubscription: Subscription,
|
scheduler: SchedulerLike,
|
work: () => void,
|
delay = 0,
|
repeat = false
|
): Subscription | void {
|
const scheduleSubscription = scheduler.schedule(function (this: SchedulerAction<any>) {
|
work();
|
if (repeat) {
|
parentSubscription.add(this.schedule(null, delay));
|
} else {
|
this.unsubscribe();
|
}
|
}, delay);
|
|
parentSubscription.add(scheduleSubscription);
|
|
if (!repeat) {
|
// Because user-land scheduler implementations are unlikely to properly reuse
|
// Actions for repeat scheduling, we can't trust that the returned subscription
|
// will control repeat subscription scenarios. So we're trying to avoid using them
|
// incorrectly within this library.
|
return scheduleSubscription;
|
}
|
}
|