You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
1.0 KiB
TypeScript
32 lines
1.0 KiB
TypeScript
1 month ago
|
import type { TimerHandle } from './timerHandle';
|
||
|
type SetTimeoutFunction = (handler: () => void, timeout?: number, ...args: any[]) => TimerHandle;
|
||
|
type ClearTimeoutFunction = (handle: TimerHandle) => void;
|
||
|
|
||
|
interface TimeoutProvider {
|
||
|
setTimeout: SetTimeoutFunction;
|
||
|
clearTimeout: ClearTimeoutFunction;
|
||
|
delegate:
|
||
|
| {
|
||
|
setTimeout: SetTimeoutFunction;
|
||
|
clearTimeout: ClearTimeoutFunction;
|
||
|
}
|
||
|
| undefined;
|
||
|
}
|
||
|
|
||
|
export const timeoutProvider: TimeoutProvider = {
|
||
|
// When accessing the delegate, use the variable rather than `this` so that
|
||
|
// the functions can be called without being bound to the provider.
|
||
|
setTimeout(handler: () => void, timeout?: number, ...args) {
|
||
|
const { delegate } = timeoutProvider;
|
||
|
if (delegate?.setTimeout) {
|
||
|
return delegate.setTimeout(handler, timeout, ...args);
|
||
|
}
|
||
|
return setTimeout(handler, timeout, ...args);
|
||
|
},
|
||
|
clearTimeout(handle) {
|
||
|
const { delegate } = timeoutProvider;
|
||
|
return (delegate?.clearTimeout || clearTimeout)(handle as any);
|
||
|
},
|
||
|
delegate: undefined,
|
||
|
};
|