import { AnyVoidFn, PromiseFn, IDictionary } from './common';
import { ArgumentNullError } from './ArgumentNullError';
export const sleep = (time: number) => new Promise(resolve => setTimeout(resolve, time));
const startTimer = (fn: AnyVoidFn, time: number) => {
const id = setTimeout(fn, time);
return () => clearTimeout(id);
};
export const timeout = (fn: PromiseFn, time: number): PromiseFn => (a) => {
return new Promise((resolve, reject) => {
const stopTimer = startTimer(() => {
reject(new Error(`Timeout has exceeded ${time}`));
}, time);
fn(a).then(value => {
resolve(value);
stopTimer();
}).catch(reject);
});
};
export const validateForNull = (props: IDictionary) => {
for (const key of Object.keys(props)) {
const value = props[key];
if (!value || Number.isNaN(value)) {
throw new ArgumentNullError(key, value);
}
}
};