-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdelayed.ts
35 lines (30 loc) · 912 Bytes
/
delayed.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import type { PrototypeStruct } from '../index.js';
type DelayedCallback<T> = (...args: any) => T;
export interface PromiseDelayed {
delayed<T>(delay: number, callback: DelayedCallback<T>): Promise<undefined | T>;
}
export const delayed: PrototypeStruct = {
isStatic: true,
label: 'delayed',
fn: function promiseDelayed<T>(
delay: number,
callback: DelayedCallback<T>
): Promise<undefined | T> {
const delayInt = null == delay ? 0 : Number(delay);
const fn = 'function' === typeof(callback) ? callback : () => void 0;
if (delayInt < 1) return Promise.resolve(fn());
return new Promise((yay, nah) => {
setTimeout(() => {
try {
yay(fn());
} catch (e) {
nah(e);
}
}, delayInt);
});
},
};
declare global {
// tslint:disable-next-line: no-empty-interface
interface PromiseConstructor extends PromiseDelayed {}
}