hexo/node_modules/ali-oss/lib/common/utils/retry.ts

27 lines
711 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;
}