export function retry(this: any, func: Function, retryMax: number, config: any = {}) { let retryNum = 0; const { retryDelay = 500, errorHandler = () => true } = config; const funcR = (...arg) => { return new Promise((resolve, reject) => { func(...arg) .then(result => { retryNum = 0; resolve(result); }) .catch(err => { if (retryNum < retryMax && errorHandler(err)) { retryNum++; setTimeout(() => { resolve(funcR(...arg)); }, retryDelay); } else { retryNum = 0; reject(err); } }); }); }; return funcR; }