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; | |
} | |
} | |