27 lines
		
	
	
		
			685 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			27 lines
		
	
	
		
			685 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
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;
 | 
						|
}
 |