UNPKG

ix

Version:

The Interactive Extensions for JavaScript

39 lines (31 loc) 884 B
import { Subscription } from './subscription.js'; export interface Scheduler { readonly now: number; delay(time: number): Promise<void>; schedule(action: () => void, dueTime: number): Subscription; } class ActionSubscription implements Subscription { public isUnsubscribed = false; private _action: () => void; constructor(action: () => void) { this._action = action; } unsubscribe() { if (!this.isUnsubscribed) { this.isUnsubscribed = true; this._action(); } } } export class DefaultScheduler implements Scheduler { get now() { return Date.now(); } delay(dueTime: number) { return new Promise<void>((res) => setTimeout(res, dueTime)); } schedule(action: () => void, dueTime: number): Subscription { const id = setTimeout(() => action(), dueTime); return new ActionSubscription(() => clearTimeout(id)); } }